gpt4 book ai didi

oauth-2.0 - 带有静默刷新的 OpenID Connect 授权代码流和 PKCE

转载 作者:行者123 更新时间:2023-12-02 04:23:44 26 4
gpt4 key购买 nike

我在我的 IdentityServer 4 上通过静默刷新实现了 openID Connect 授权代码流和 PKCE 我有一个引用 IdentityServer 的核心 API 和一个 angular 8 front 和 oidc-client.js。

当我没有登录时,oidc-client 将我重定向到 IdentityServer 登录页面,我可以从那里登录,然后 IdentityServer 将我重定向到角度应用程序。我有一个 Bearer 格式的访问 token ,它被传输到 API 和一个 iframe 经常弹出并联系/connect/authorize 上的 IdentityServer。当我注销时,我在 IdentityServer 上被重定向,然后转到我的角度前端,要求我登录。

这里你可能会问这家伙到底是什么问题。给你:

当我在 postman 中复制/粘贴 Bearer token 时,我可以永久使用它,AccessTokenLifetime(数据库字段)设置为 65,用户注销后,截断 PersistedGrants 表后,执行“_signInManager.SignOutAsync”后“_persistedGrantService.RemoveAllGrantsAsync”。

我现在给你一些代码:

Startup.cs API

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = configApp.UrlIdentityServer;
options.RequireHttpsMetadata = false;
options.ApiName = "example.api";
});

Controller 方法示例:

 [HttpGet("{id:int}")]
[Authorize]
public ActionResult<FormatedResult<Stuff>> GetStuff(int id)
{/*great stuff*/}

角度注销方法

async logout() {
this.manager.signoutRedirect()
.catch((error) => {
});
this.manager.signoutRedirectCallback()
.then(() => {
this.manager.removeUser();
})
.then(() => {
this.user = null;
})
.catch((error) => {
});
}

角度 oidc 管理器设置

    authority: 'http://example.authserver.loc/',
client_id: 'example.ng.manager',
redirect_uri: 'http://ng.example.loc:5001/callbacksignin/',
post_logout_redirect_uri: 'http://ng.example.manager.loc:5001/',
response_type: 'code',
scope: 'openid profile example.api',
filterProtocolClaims: true,
loadUserInfo: true,
userStore: new WebStorageStateStore({store: window.localStorage}),
automaticSilentRenew: true,
silent_redirect_uri: 'http://ng.example.manager.loc:5001/silent-refresh.html',
revokeAccessTokenOnSignout: true

我虽然使用静默刷新来避免不记名 token 被盗和坏男孩在我的 API 上无限期地做坏事。通过我的实现,坏小子们可以永远玩弄我的 API。

我的问题:

  • 它应该发生吗?
  • access_token 是否终身授予?
  • 如果不是我做错了什么?
  • 如何在 AccessTokenLifetime 过后拒绝使用访问 token ?或在用户注销后。

注意:我禁用了所有缓存。

最佳答案

I though silent-refresh was used to avoid having a bearer token stolen and a bad boy doing bad thing on my API for an unlimited period of time. With my implementation the bad boys can play with my API for eternity.

My questions :

Is it suppose to happen ?

静默刷新不是以避免不记名 token 被盗。由于公共(public)客户端(如基于 javascript 的客户端)的性质,您的 access_token 将始终有机会被公开。那里有静默刷新,所以如果用户可以使用 PKCE 之类的东西进行刷新,那么这是静默完成的,不会打扰用户。

同时删除 PersistedGrants 对代码 + PKCE 客户端没有任何影响,因为它们不使用刷新 token (这就是 PKCE 的用途)。

Does the access_token is granted for life ?

访问 token 的有效期取决于其到期时间,由 AccessTokenLifetime 确定。但是,如果您使用带有静默刷新的 PKCE,它们可以像我提到的那样被更新。

If not what did I do wrong ? How can I deny the use of the access token after AccessTokenLifetime is passed ? or after the user logout.

需要明确的是,访问 token 的生命周期是在颁发 token 时确定的,因此如果您在之后更改 AccessTokenLifetime 的值,这将是新 token 的持续时间不是现有的 token 。一旦 access_token jwt 过期, token 将自动失效。

关于oauth-2.0 - 带有静默刷新的 OpenID Connect 授权代码流和 PKCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com