如何从login.microsoftonline.com获取AD访问令牌,并将访问令牌传递给web api控制器?因为我需要“访问令牌”这样通过post请求传递到另一个合作伙伴公司的网站网址。
下面的代码做了AAD身份验证的预期,但我也需要“访问令牌”这样,
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(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.TokenValidationParameters.ValidateIssuer = false;
});
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}发布于 2020-04-01 13:56:31
上面的代码片段附加在原始帖子中,没有暴露访问令牌,但在内部它管理获取访问令牌和验证,如何做更透明的方式?
您可以在身份验证后获得令牌:
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/"; // Microsoft identity platform
options.SaveTokens = true;
options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
});并在控制器中获取tokes:
var idToken = await HttpContext.GetTokenAsync("id_token"); 但是对于您的代码片段,它不会返回访问令牌,因为您实现的是登录过程,而不是令牌请求。使用ADAL/MSAL获取访问受保护API的访问令牌。请参阅代码示例here。
我从
获取访问令牌,并使用自定义代码验证它,以便更好地理解。
发布于 2020-04-01 18:38:41
嗨,请下载并按照示例中提供的说明进行操作。它可帮助您首先设置Web APi,并提供一个客户端应用程序,该应用程序首先登录用户,然后获取web Api的访问令牌
How to secure a Web API built with ASP.NET Core
一旦你可以让样本工作,你就可以用你合作伙伴的Web Api替换样本的Web Api。
https://stackoverflow.com/questions/60935389
复制相似问题