初始化客户端应用程序
使用 MSAL.NET 3.x 实例化应用程序的建议方式是使用应用程序生成器 PublicClientApplicationBuilder
和 ConfidentialClientApplicationBuilder
。 这些生成器提供强大的机制用于通过代码、配置文件甚至两者的混合来配置应用程序。
在初始化应用程序之前,首先需要注册它,以便应用可以与 Microsoft 标识平台集成。 注册后,可能需要以下信息(可在 Azure 门户中找到):
- 应用程序(客户端)ID - 这是一个表示 GUID 的字符串。
- 目录(租户)ID - 向组织使用的应用程序和资源提供标识和访问管理 (IAM) 功能。 它可以指定你是否仅为组织编写业务线应用程序(也称为单租户应用程序)。
- 标识提供者 URL(名为“实例”)和应用程序的登录受众。 这两个参数统称为颁发机构。
- 客户端凭据 - 如果是机密客户端应用,则可以采用应用程序机密(客户端机密字符串)或证书(类型为
X509Certificate2
)的形式。 - 对于 Web 应用,有时对于公共客户端应用(特别是当你的应用需要使用中转站时),还需要设置“重定向 URI”,标识提供者将在其中使用安全令牌联系你的应用程序。
从代码初始化公共和机密客户端应用程序
以下代码实例化公共客户端应用程序,让用户通过其工作和学校帐户或其个人 Microsoft 帐户在 Microsoft Azure 公有云中登录。
IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId).Build();
以下代码以相同的方式实例化一个机密应用程序(位于 https://myapp.azurewebsites.net
上的 Web 应用),该应用程序可以使用工作和学校帐户或个人 Microsoft 帐户处理 Microsoft Azure 公有云中用户的令牌。 标识提供者通过共享客户端机密标识该应用程序:
string redirectUri = "https://myapp.azurewebsites.net";
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithRedirectUri(redirectUri )
.Build();
生成器修饰符
在使用应用程序生成器的代码片段中,可将 .With
方法应用为修饰符(例如 .WithAuthority
和 .WithRedirectUri
)。
.WithAuthority
修饰符:.WithAuthority
修饰符将应用程序默认授权设置为 Microsoft Entra 授权,可以选择 Azure 云、受众、租户(租户 ID 或域名)或直接提供授权 URI。IPublicClientApplication app; app = PublicClientApplicationBuilder.Create(clientId) .WithAuthority(AzureCloudInstance.AzurePublic, tenantId) .Build();
.WithRedirectUri
修饰符:.WithRedirectUri
修饰符替代默认重定向 URI。IPublicClientApplication app; app = PublicClientApplicationBuilder.Create(client_id) .WithAuthority(AzureCloudInstance.AzurePublic, tenant_id) .WithRedirectUri("http://localhost") .Build();
公共和机密客户端应用程序通用的修饰符
下表列出了可以在公共客户端或机密客户端上设置的一些修饰符。
修饰符 | 说明 |
---|---|
.WithAuthority() |
将应用程序默认授权设置为 Microsoft Entra 授权,可以选择 Azure 云、受众、租户(租户 ID 或域名)或直接提供授权 URI。 |
.WithTenantId(string tenantId) |
重写租户 ID 或租户说明。 |
.WithClientId(string) |
重写客户端 ID。 |
.WithRedirectUri(string redirectUri) |
重写默认的重定向 URI。 这对需要中转站的场景很有用。 |
.WithComponent(string) |
使用 MSAL.NET 设置库的名称(出于遥测原因)。 |
.WithDebugLoggingCallback() |
如果被调用,应用程序将调用 Debug.Write ,目的只是启用调试跟踪。 |
.WithLogging() |
如果被调用,应用程序将调用带有调试跟踪的回叫。 |
.WithTelemetry(TelemetryCallback telemetryCallback) |
设置用于发送遥测数据的委托。 |
特定于机密客户端应用程序的修饰符
可以在 ConfidentialClientApplicationBuilder
类中找到特定于机密客户端应用程序生成器的修饰符。 可以在适用于 .NET 的 Azure SDK 文档中找到不同的方法。
.WithCertificate(X509Certificate2 certificate)
和 .WithClientSecret(string clientSecret)
等修饰符是互斥的。 如果同时提供这两者,MSAL 会引发有意义的异常。