【发布时间】:2020-04-05 00:08:01
【问题描述】:
我按照这个例子构建了一个 Angular 应用程序: https://github.com/microsoftgraph/msgraph-training-angularspa
我可以从 Angular 应用程序登录 MS Graph,甚至对其进行身份验证。
我正在尝试将令牌传递给我创建的 API 服务。但是我不断收到以下错误:
WWW-Authenticate: Bearer error="invalid_token", error_description="签名无效"
到目前为止,我已经尝试了所有可能的方法,但没有运气。我继续收到此错误。我试过AzureADBearer 库:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
options.Authority += "/v2.0";
options.TokenValidationParameters.ValidAudiences = new string[]
{
options.Audience, $"api://{options.Audience}"
};
options.TokenValidationParameters.ValidateIssuer = false;
options.TokenValidationParameters.IssuerValidator = AadIssuerValidator.GetIssuerValidator(options.Authority).Validate;
});
我也尝试过 Microsoft.Identity.Web 库,但我遇到了同样的错误:
services.AddProtectedWebApi(Configuration);
我已经搜索了几天,我发现其他人有同样的问题,但到目前为止还没有明确的解决方案。任何帮助将不胜感激。
编辑
我正在尝试为我的组织构建一个使用我们的 AzureAD 进行身份验证的应用程序。该应用程序具有 Angular 前端和 aspnetcore webapi 作为后端。我对如何实现这一点并不太特别。只是想办法完成它。
【问题讨论】:
-
您发送的令牌是什么样子的?您的 AAD 中的 API 可能已配置为获取 v1 令牌。在这种情况下,签名密钥可能不同。您可以通过查看发行者声明 (iss) 来判断它是否是 v1 代币; v1 令牌有
https://sts.windows.net/guid。您可以在例如检查令牌jwt.ms. -
这是一个 v1 令牌。虽然我的端点指向 v2 并且应用清单设置为返回 v2 令牌,但我收到的令牌是 v1。
-
好吧,这很奇怪????你是如何获得令牌的?你用什么作为范围?
-
好的,您的 API 接收的令牌中的受众应该与 API 客户端 ID 或应用 ID URI 匹配。否则你可能会向你的 API 发送一个 MS Graph API 令牌,这是不正确的。
-
@juunas 谢谢你在另一个帖子上的回复也帮助我找到了答案
标签: angular azure-active-directory asp.net-core-webapi msal bearer-token