我有 2 个网络应用程序。
- 站点 A 既是前端 (Angular),又是一个用 .NET 核心编写的 Web API。
- 站点 B 是用 .NET 核心编写的 Web API。
两个站点中的 Web API 是相同的。认证是一样的。
测试 1:当我要求站点 A 使用它自己的 API 来获取数据(启用站点 A 的身份验证)时,它工作得很好。
测试 2:当我要求站点 A 使用站点 B 获取数据(站点 B 的身份验证关闭)时,它工作得很好。
测试 3:当我要求站点 A 使用站点 B 获取数据(站点 B 的身份验证打开)时,它失败并出现未经授权的错误 401。
这是我用来验证的代码...
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.MetadataAddress = String.Format("https://login.microsoftonline.com/{0}/v2.0/.well-known/openid-configuration", Configuration["AzureAd:TenantId"]);
o.Audience = Configuration["AzureAd:ClientId"];
});
所以...
我知道令牌正确通过(因为测试 A)。
我知道被调用的站点 B API 是可访问且正确的(因为测试 B)。
因此,我认为问题在于传递给 Azure AD 的值。我假设 Azure 不认为在站点 A 中获取并在站点 B 中验证的令牌(具有不同的 URI)不是“相同的”,因此未获得授权。
我需要将什么传递给 Azure 才能使其正常工作?
谢谢