我正在尝试使用令牌身份验证从我的WebApp访问我的WebApi。我已成功登录到我的WebApp。然后我要求一个新的令牌:
var signedInUserID = _idenetityParser.Parse().Id.ToString();
var userTokenCache = new MSALSessionCache(signedInUserID, _httpContext).GetMsalCacheInstance();
var cca = new ConfidentialClientApplication(
_azureOptions.ClientId,
_azureOptions.Authority,
"http://localhost/",
new ClientCredential(_azureOptions.ClientSecret), userTokenCache, null);
var result = await cca.AcquireTokenSilentAsync(new string[] { "https://tests.onmicrosoft.com/company/rw" }, cca.Users.FirstOrDefault(), _azureOptions.Authority, false);
return result.AccessToken;
这很好用,我得到了一个新请求范围的AccessToken。
然后我使用HttpClient调用WebApi,将Authorization Header设置为Bearer并传入令牌。之后我收到以下错误:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10500:签名验证失败。没有提供安全密钥 验证签名。
我在WebApi上使用以下设置:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => new JwtBearerOptions
{
Authority = string.Format("https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/", Configuration["Authentication:AzureAd:Tenant"], Configuration["Authentication:AzureAd:Policy"]),
Audience = Configuration["Authentication:AzureAd:ClientId"],
Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed,
OnTokenValidated = OnTokenValidated
}
});
我在WebApp和WebApi上检查了权限,它们是相同的。我使用https在本地开发计算机上运行。
不确定下一步该怎么做才能找到问题。任何建议都表示赞赏。