根据方案选择 Microsoft Graph 身份验证提供程序

身份验证提供程序使用 MICROSOFT 身份验证库和 MSAL 身份验证库实现获取 (所需的) ;处理增量同意、密码过期和条件访问等情况下的一些潜在错误;,然后设置 HTTP 请求授权标头。 下表列出了一组与不同应用程序类型的方案匹配的 提供程序

应用场景 Flow/授予 受众 提供程序
单页应用
隐式 委派使用者/组织 隐式提供程序
调用 Web API 的 Web 应用
授权代码 委派使用者/组织 授权代码提供程序
客户端凭据 仅限应用 客户端凭据提供程序
调用 Web API 的 Web API
代表 委派使用者/组织 代表提供商
客户端凭据 仅限应用 客户端凭据提供程序
调用 Web API 的桌面应用
Interactive 委派使用者/组织 交互式提供程序
集成Windows 委派组织 集成Windows提供程序
资源所有者 委派组织 用户名/密码提供程序
设备代码 委派组织 设备代码提供程序
守护程序应用
客户端凭据 仅限应用 客户端凭据提供程序
调用 Web API 的移动应用
Interactive 委派使用者/组织 交互式提供程序

注意Java和 android 开发人员需要添加 azure-identity 库才能访问不同的凭据类型。

授权代码提供程序

授权代码流使本机和 Web 应用能够安全地获取用户名称中的令牌。 若要了解更多信息,请参阅Microsoft 标识平台 和 OAuth 2.0 授权代码流

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

客户端凭据提供程序

客户端凭据流使服务应用程序无需用户交互即可运行。 访问基于应用程序的标识。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 客户端凭据流

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantID)
    .WithClientSecret(clientSecret)
    .Build();

ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

代表提供程序

当应用程序调用服务/Web API 时,代表流适用,而服务/Web API 则调用 Microsoft Graph API。 有关详细信息,Microsoft 标识平台OAuth 2.0 代表流

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret)
    .Build();

OnBehalfOfProvider authProvider = new OnBehalfOfProvider(confidentialClientApplication, scopes);

隐式提供程序

隐式授予流用于基于浏览器的应用程序。 有关详细信息,请参阅Microsoft 标识平台和隐式授予流

不适用。

设备代码提供程序

设备代码流允许通过另一台设备登录到设备。 有关详细信息,请参阅Microsoft 标识平台 和 OAuth 2.0 设备代码流

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .Build();

Func<DeviceCodeResult, Task> deviceCodeReadyCallback = async dcr => await Console.Out.WriteLineAsync(dcr.Message);

DeviceCodeProvider authProvider = new DeviceCodeProvider(publicClientApplication, scopes, deviceCodeReadyCallback);

集成Windows提供程序

集成Windows流为计算机提供了一Windows加入域时以静默方式获取访问令牌的方法。 有关详细信息,请参阅集成Windows身份验证

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantID)
            .Build();

IntegratedWindowsAuthenticationProvider authProvider = new IntegratedWindowsAuthenticationProvider(publicClientApplication, scopes);

交互式提供程序

交互流由 Xamarin (UWP) 桌面应用程序使用,以用户Graph调用 Microsoft Graph。 有关详细信息,请参阅 以交互方式获取令牌

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .Build();

InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(publicClientApplication, scopes);

用户名/密码提供程序

用户名/密码提供程序允许应用程序使用用户的用户名和密码登录。 只有在不能使用任何其他 OAuth 流时,才使用此流。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 资源所有者密码凭据

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenantID)
            .Build();

UsernamePasswordProvider authProvider = new UsernamePasswordProvider(publicClientApplication, scopes);

GraphServiceClient graphClient = new GraphServiceClient(authProvider);

User me = await graphClient.Me.Request()
                .WithUsernamePassword(email, password)
                .GetAsync();

后续步骤

  • 有关显示如何使用 Microsoft 标识平台 保护不同应用程序类型的代码示例,请参阅 Microsoft 标识平台v2.0 终结点 (代码) 。
  • 身份验证提供程序需要客户端 ID。 设置身份验证 提供程序后 ,需要注册应用程序。
  • 通过投票或打开 Microsoft Graph请求,请告诉我们所需的 OAuth流当前是否受支持