大佬教程收集整理的这篇文章主要介绍了AWS Cognito JWT 不会通过 .net core api 验证,缺少 cognito 配置?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 JWT 令牌将 Angular 应用程序附加到 .NET 核心 API。此时,我有本地 Angular 应用程序使用 Cognito 进行身份验证并获取用户帐户。
我已经按照此获取附加到请求的令牌。 https://medium.com/@umashankar.itn/aws-cognito-hosted-ui-with-angular-and-asp-net-core-5ddf351680a5
Amplify.Configure({
Auth: {
region: 'us-West-2',userPoolID: 'us-West-MY POol',userPoolWebClIEntID: 'MY APP CLIENT ID'
}
}
});
intercept(request: httprequest<unkNown>,next: httpHandler): Observable<httpEvent<unkNown>> {
if (request.url.indexOf(environment.API.baseUrl) == 0) {
return this.getToken().pipe(mergeMap(token => {
request = request.clone({
setheaders: {
Authorization: `Bearer ${token}`
}
});
return next.handle(request);
}));
}
return next.handle(request);
}
}
getToken() {
return from(
new Promise((resolve,reject) => {
Auth.currentSession()
.then((session) => {
if (!session.isValID()) {
resolve(null);
} else {
resolve(session.getIDToken().getJwtToken());
}
})
.catch(err => {
return resolve(null)
});
})
);
}
我可以确认它正在将令牌添加到请求中。
值得注意的是,我使用的是 session.getIDToken().getJwtToken()
,但也有 session.getAccesstoken().getJwtToken()
,它们是不同的。我找不到任何东西告诉我有什么区别,但我都试过了,他们都有同样的问题。
对于服务器端,我已按照此答案设置 .net 核心站点,并且我可以确认它正确地从 /.well-kNown/jwks.Json
下载了密钥。然而,它只是不断拒绝身份验证失败的请求。
How to validate AWS Cognito JWT in .NET Core Web API using .AddJwtBearer()
services
.AddAuthentication(JwtBearerDefaults.AuthenticationscheR_958_11845@E)
.AddJwtBearer(options =>
{
options.Savetoken = true;
options.TokenValIDationParameters = new TokenValIDationParameters
{
ValIDateIssuerSigningKey = true,IssuerSigningKeyResolver = (s,securityToken,IDentifIEr,parameters) =>
{
// get JsonWebKeySet from AWS
var Json = new WebClIEnt().DownloadString(parameters.Validissuer + "/.well-kNown/jwks.Json");
// serialize the result
return JsonConvert.DeserializeObject<JsonWebKeySet>(Json).Keys;
},ValIDateIssuer = true,Validissuer = $"https://cognito-IDp.us-West-2.amazonaws.com/us-West-MYID",ValIDatelifetime = true,lifetimeValIDator = (before,expires,token,param) => expires > datetiR_958_11845@e.UtcNow,ValIDateAudIEnce = true,ValIDAudIEnce = "MY APP CLIENT ID"
};
});
app.UseAuthentication();
[httpGet]
[Authorize]
public IEnumerable<Device> Get()
{
return 'my devices...';
}
angular 应用在 http://localhost:4200
处运行,.net 核心在 https://localhost:44300
处运行。
所以我的问题是,我是否在我的 Cognito 应用程序客户端中遗漏了某种设置?要让 .NET 核心应用程序采用 JWT,我还缺少什么?
事实证明,就 Cognito 而言,我确实做到了一切正确。
我所拥有的是这个。
app.UseRoutIng();
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
哪个不是工作的正确顺序...这是..
app.UseRoutIng();
app.UseAuthentication(); <-- Authentication before authorization
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
以上是大佬教程为你收集整理的AWS Cognito JWT 不会通过 .net core api 验证,缺少 cognito 配置?全部内容,希望文章能够帮你解决AWS Cognito JWT 不会通过 .net core api 验证,缺少 cognito 配置?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。