【发布时间】:2020-02-22 02:37:59
【问题描述】:
我有一个与 .Net Core 2.2 API 后端接口的 Angular 7 应用程序。这是与 Azure Active Directory 的接口。
在 Angular 7 方面,它正在通过 AAD 正确进行身份验证,并且我得到了一个有效的 JWT,正如在 jwt.io 上验证的那样。
在 .Net Core API 方面,我创建了一个简单的测试 API,上面有 [Authorize]。
当我从 Angular 调用此方法时,添加 Bearer 令牌后,我得到(如 Chrome 调试工具、网络选项卡、“标题”中所示):
WWW-Authenticate: Bearer error="invalid_token", error_description="The 未找到签名密钥”
带有HTTP/1.1 401 Unauthorized。
简单的测试 API 是:
[Route("Secure")]
[Authorize]
public IActionResult Secure() => Ok("Secure works");
Angular 调用代码也很简单:
let params : any = {
responseType: 'text',
headers: new HttpHeaders({
"Authorization": "Bearer " + token,
"Content-Type": "application/json"
})
}
this.http
.get("https://localhost:5001/api/azureauth/secure", params)
.subscribe(
data => { },
error => { console.error(error); }
);
如果我删除 [Authorize] 属性并将其作为来自 Angular 的标准 GET 请求调用它可以正常工作。
我的 Startup.cs 包含:
services
.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureADBearer(options => this.Configuration.Bind("AzureAd", options));
所有选项都在 appsettings.json 中正确设置(例如 ClientId、TenantId 等),options 这里按预期填充。
【问题讨论】:
-
您是如何获得访问令牌的?听起来令牌可能是 Microsoft Graph API 令牌。
-
@juunas 我在 Azure AD 中注册了一个应用程序,并且有一个 ClientID、TenantID 和特定于应用程序的机密,这些机密被传递到 Azure 管理控制台中提供的正确端点。这是一个有效的 JWT。看起来这最终可能会与应用程序中的现有授权方案发生冲突。在这个角度上工作。
-
运气好吗?我也面临同样的问题。
-
@PatrickI 有同样的问题吗?你找到解决办法了吗?
标签: c# angular asp.net-core jwt azure-active-directory