我有一个角度应用程序,它从azure请求令牌。登录进展顺利,我得到一个令牌。此令牌现在从角度应用程序发送到网络核心webapi应用程序。 Net core应该验证此令牌但是失败了。我认为webapi还应该联系azure来验证令牌,因为它不知道验证令牌所需的私钥和公钥。
目前还不清楚为什么会失败。角度应用程序和webapi都在我的计算机上运行。
错误是:Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: 'IDX10500: Signature validation failed. No security keys were provided to validate the signature.'
我的net core 2配置是:
var tokenValidationParameters = new TokenValidationParameters
{
RequireExpirationTime = true,
RequireSignedTokens = false,
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidIssuer = "8d708afe-2966-40b7-918c-a39551625958",
ValidateAudience = true,
ValidAudience = "https://sts.windows.net/a1d50521-9687-4e4d-a76d-ddd53ab0c668/",
ValidateLifetime = false,
ClockSkew = TimeSpan.Zero
};
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Audience = "8d708afe-2966-40b7-918c-a39551625958";
options.ClaimsIssuer = "https://sts.windows.net/a1d50521-9687-4e4d-a76d-ddd53ab0c668/";
options.RequireHttpsMetadata=false;
options.TokenValidationParameters = tokenValidationParameters;
options.SaveToken = true;
});
答案 0 :(得分:3)
你有很多配置:)
两个强制性设置是受众和权限:
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(o =>
{
o.Audience = "8d708afe-2966-40b7-918c-a39551625958";
o.Authority = "https://login.microsoftonline.com/a1d50521-9687-4e4d-a76d-ddd53ab0c668/";
});
您缺少权限,因此它不知道从哪里加载签名公钥。
答案 1 :(得分:-1)
您在 TokenValidationParameters 中缺少IssuerSigningKey
媒体资源。这就是为什么抱怨。
最简单的例子是
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yOURsECRETkEY12345"))
我不确定azure是如何发挥作用的,你可能需要它来检索安全密钥信息,如果那是你的签名权限
修改强>
Azure特定设置
.AddJwtBearer(options => {
options.Authority = string.Format("https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/", Configuration["Authentication:AzureAd:Tenant"], Configuration["Authentication:AzureAd:Policy"]);
options.Audience = Configuration["Authentication:AzureAd:ClientId"];
});