我正在使用Vue.js和.net核心Web API来设置网页。前端和后端完全分开。
我已将我的API配置为使用openid connect和AWS Cognito中的“授权代码授予”进行身份验证,如下所示:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.ResponseType = OpenIdConnectResponseType.Code;
options.MetadataAddress = cognitoSettings.AuthorityUrl;
options.ClientId = cognitoSettings.ClientId;
options.SaveTokens = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true
};
});
当我从[授权]控制器请求数据后,该功能在浏览器中可以正常工作,当我重定向到Cognito登录页面并且输入凭据后,我可以看到授权数据。
但是,如果我在Vue-App中使用ajax(axios)请求相同的资源,则后端将返回302,并且由于跨源策略的缘故,ajax调用失败。 (因为Cognito登录名与我的后端不在同一个域中)
所以我的问题是:如何使这种情况起作用?
我需要将openid身份验证移动到前端吗 使这项工作并使后端仅将Bearer令牌用于 授权?但是然后我需要所有openid信息,例如name或 email-address在后端而不在我的Vue-App中。那我怎么得到他们?
是否可以将响应代码从302更改为401 前端可以响应未经授权的呼叫并重定向用户? 但是我从哪里得到登录URL,因为所有配置(client_id,metadataaddress)都是 在我的后端中配置。
答案 0 :(得分:0)
一些适合您的指标: *您的API不应使用openid connect-它应仅验证访问令牌 *您的SPA应该使用Javascript库实现Open Id Connect
我的博客上有一个具有此体系结构的Cognito示例用户界面-您可以登录-看到此链接: https://authguidance.com/home/code-samples-quickstart/
博客上有一些相关的文章和代码示例-可能会看到第一个SPA示例和.Net Core示例