azure - Azure AD + ASP.Net Core 2.1 的未经授权的响应和无效的受众错误
问题描述
我使用带有 Azure AD 身份验证的 ASP.net Core 2.1 开发了一个 UI 和 Web API。两者都注册了 Azure 应用程序注册。我在 UI 中使用下面的代码。但我收到一个未经授权的错误。
string AZURE_AD_INSTANE = "https://login.microsoftonline.com/";
string TENANT_ID = "<tenant GUID>";
string CLIENT_ID = "<Client GUID ofWeb API>";
string SECRET = "<Secret created for Web API under Certificates & secrets>";
string RESOURCE = "https://MyOrg.onmicrosoft.com/TestWebAPI"; //Application ID URI set in Expose an API
ClientCredential ClientCredential = new ClientCredential(CLIENT_ID, SECRET);
string authority = String.Format("{0}{1}", AZURE_AD_INSTANE, TENANT_ID);
AuthenticationContext authContext = new AuthenticationContext(authority);
string accessToken = authContext.AcquireTokenAsync(RESOURCE, ClientCredential).Result.AccessToken;
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://localhost:44326/api/values/Get");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = client.SendAsync(request).GetAwaiter().GetResult();
string status = response.StatusCode.ToString();
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
我正在获取访问令牌。当我签入 jwt.io 时,它显示“签名已验证”。但是 API 调用给出了未经授权的响应状态代码。当我检查响应头时,它的信息为“{Bearer error="invalid_token", error_description="The Audience is invalid"}”
我该如何解决这个问题?
解决方案
确保https://MyOrg.onmicrosoft.com/TestWebAPI在您的 WebAPI 中注册为有效受众:
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = true,
ValidAudiences = new List<string>
{
"https://MyOrg.onmicrosoft.com/TestWebAPI",
"..."
}
}
};
推荐阅读
- pandas - 减少了带有条件记录的 Pandas 过滤器
- node.js - 不能 POST - 我的 POST 请求有什么问题?节点
- python - OneHotEncoder 在数据预处理期间导致类型错误
- linux - 卷曲 SMTP 在本地机器上工作,但不在服务器上
- javascript - Slick Slider 移动响应能力
- html - 使用 CSS-HTML 的幻灯片仅显示四张幻灯片
- c++ - 将 unsigned char 写入输出文件
- scala - 来自 tsv 文件的火花计数基因突变
- typescript - 如何在角度材料表中调用用户定义的方法?
- c++ - N维向量的C++模板别名