在.net核心Web API中通过Grant_type作为密码进行身份验证并获取Azure AD令牌

时间:2019-01-16 11:10:44

标签: asp.net-core azure-active-directory

如何使用grant_type:password机制在.ne​​t核心Web API中配置Azure AD身份验证并获取访问令牌?无需重新重定向天蓝色门户。

public void ConfigureServices(IServiceCollection services) { 
    services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. 
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme) .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

1 个答案:

答案 0 :(得分:0)

如果您直接将发帖请求发送到令牌端点(如本thread所示),就有可能。

但是不推荐是“资源所有者密码凭证授予”,因为它不如其他流程(您的应用程序处理凭证)安全,并且与条件访问不兼容。此外,被邀请到Azure AD租户的个人帐户不能使用ROPC。另外,如果用户需要使用多因素身份验证(MFA)登录到应用程序,则会被阻止。

-------建议的方法

如果该场景是用户已在客户端应用程序上进行了身份验证,并且还获得了访问令牌以访问您的Web api,则在Web api中,您需要调用其他资源/ API,可以使用On-Behalf-Of flow这使调用服务或Web API的应用程序可以将用户身份验证传递给另一个服务或Web API。您可以单击here来获取.Net Core中的代码示例。

您还可以使用OAuth 2.0 Client Credentials Grant Flow允许Web服务(机密客户端)使用其自己的凭据,而不是模拟用户,从而在调用另一个Web服务时进行身份验证。您可以单击here以获得代码示例。