初始化客户端应用程序

已完成

使用 MSAL.NET 3.x 实例化应用程序的建议方式是使用应用程序生成器 PublicClientApplicationBuilderConfidentialClientApplicationBuilder。 这些生成器提供强大的机制用于通过代码、配置文件甚至两者的混合来配置应用程序。

在初始化应用程序之前,首先需要注册它,以便应用可以与 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 会引发有意义的异常。