【问题标题】:Make request from Frontend using Access Token which was issued for the Backend使用为后端颁发的访问令牌从前端发出请求
【发布时间】:2019-09-25 13:12:46
【问题描述】:

我有一个具有经典客户端服务器架构的应用程序。 ASP.NET Core 位于后端和前端 jQuery、Angular 或 vanilla-js。

对于身份验证,我使用 OpenID-Connect 认证服务器。 (钥匙斗篷)

到目前为止,我可以通过 asp.net 核心身份验证中间件登录。获取我的访问令牌和刷新令牌。

我的配置如下:

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
    options.RequireHttpsMetadata = false;
    options.MetadataAddress = Configuration["IdentityServer:Metadata"];

    options.ClientId = Configuration["IdentityServer:ClientId"];
    options.ClientSecret = Configuration["IdentityServer:ClientSecret"];
    options.SaveTokens = true;

    options.ResponseType = "code";

    options.Scope.Add("openid profile email web origons roles SocpoeOnlyForDeveopers");
});

现在我想使用收到的访问令牌访问资源,不仅从我的后端,而且从我的前端。

到目前为止,我只找到了一种解决方案:将访问令牌存储在 _Layout.cshtml 中的 js 变量中。

当访问令牌过期时,我向后端发出请求以获取新的访问令牌。然后在后端,我用刷新令牌请求授权服务器获取新的访问令牌。然后我将访问令牌发送回前端。

有点像这里: https://medium.com/@ognjanovski.gavril/use-refresh-token-to-renew-access-token-and-resend-all-unauthorized-401-requests-that-failed-190e9c97fc3a

因为我的访问令牌在 5 分钟后过期(缩短?)(默认为 keycloak),所以会有很多网络活动。

有没有更好的办法?

【问题讨论】:

    标签: c# asp.net-core keycloak openid-connect asp.net-identity-3


    【解决方案1】:

    在您的情况下,使用后端作为令牌获取机制是一个坏主意。相反,您的前端应该是身份验证启动应用程序组件,因此令牌对将存储在前端应用程序中(您必须将 keycloak JS 适配器集成到前端)。如果是这样,您可以通过 Bearer 方案从前端调用后端。所以你的后端应该是一个bearer-only应用程序。

    例如,您可以看到 keycloak 管理控制台的工作原理(实际上是两个应用程序:Admin UI,它将通过将用户重定向到 Keycloak 登录页面和 realm-management 来强制用户通过身份验证 后端接收来自管理 UI 的标头中带有访问令牌的请求)

    【讨论】:

    • 感谢您的回答。如果我说得对,我的后端基本上应该是一个资源,它需要在授权标头中使用访问令牌。具有“后端访问”之类的范围。正确的?您能否解释一下我的解决方案的潜在危险是什么?
    • 到目前为止,您的令牌仅在当前用户会话中可见,不存在任何安全问题。但总的来说,从架构的角度来看,您的方法是错误的,它将在您的应用程序生命周期中导致未来的新问题。您当前的问题只是一个证据。
    猜你喜欢
    • 2018-08-22
    • 2021-10-06
    • 2019-05-24
    • 2019-05-02
    • 2019-02-19
    • 2019-07-17
    • 2019-12-03
    • 2021-06-12
    • 2020-10-20
    相关资源
    最近更新 更多