如何解决具有Cognito身份验证的ASP.NET Core混合Razor Pages / React SPA应用
我有2个应用程序:
-App1,它使用带有内置Cognito身份中间件的Razor页面进行身份验证
-App2,使用.net核心react SPA模板构建,使用aws-amplify在react客户端中进行身份验证,并使用JWT承载令牌对.NET Core后端API进行API调用。
两者都很好。
我现在正在尝试将App1迁移到类似于App2的.net core / SPA模型。
我能够在其中添加一个带有React应用的ClientApp,并重用App2中的大多数aws-amplify代码进行身份验证。
我要实现的目标-如果用户通过客户端中的aws-amplify登录,则可以访问Razor Pages(访问受限)中的所有路由。 我可以通过JWT Bearer令牌auth达到API端点的要求。但是,尝试访问Razor Pages不起作用,即使我的应用程序已配置为使用JWT,Razor Pages也需要另一种身份验证?
作为参考-这是我使用cognito JWT Bearer令牌授权对我的API端点的访问的方法:
private void Auth(IServiceCollection services)
{
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
var userPoolId = Configuration["Cognito:UserPoolId"];
var userPoolClientId = Configuration["Cognito:UserPoolClientId"];
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKeyResolver = (s,securityToken,identifier,parameters) =>
{
var json = new WebClient().DownloadString(
parameters.ValidIssuer + "/.well-known/jwks.json");
var keys = JsonConvert.DeserializeObject<JsonWebKeySet>(json).Keys;
return keys;
},ValidIssuer = $"https://cognito-idp.my-region.amazonaws.com/{userPoolId}",ValidateIssuerSigningKey = true,ValidateIssuer = true,ValidateLifetime = true,ValidAudience = userPoolClientId,ValidateAudience = true
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("xx",policy => policy.RequireClaim("cognito:groups","xx"));
options.AddPolicy("yy","yy"));
});
}
然后我的问题是-如何利用认知身份验证来允许通过客户端中的AWS Amplify登录的用户也访问受保护的Razor页面?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。