IdentityServer4-刷新令牌混合流-Cookie和存储

问题描述 投票:0回答:1

我遵循了Quickstart Hybrid Flow here,但在使用刷新令牌后需要一些有关保存令牌的帮助和建议。

如果我说的是真的,则选项[[SaveTokens允许将令牌保存在cookie中。

[首先,将访问和刷新令牌存储在cookie中(对安全性的担忧)是一个好主意吗?

其他问题,我通过代码正确检索了刷新令牌var refreshToken = await HttpContext.GetTokenAsync("refresh_token");,但是现在,当我获得新的访问令牌时,如何存储它(没有SetTokenAsync方法)?...因为没有那样的话,我会在调用var refreshToken = await HttpContext.GetTokenAsync("access_token");时检索旧的acces令牌,而我想获取新的。

谢谢

.net security identityserver4 access-token refresh-token
1个回答
2
投票
documentation

交互式客户端应使用基于授权码的流程。至防止代码替换,混合流或PKCE应该被使用。

因此,PKCE和混合流的组合不是必需的,并且可能没有用。

如果有PKCE,这是解决问题的更简单方法。

PKCE已经是本机应用程序的官方推荐和SPA-以及默认情况下发布的ASP.NET Core 3OpenID Connect处理程序也支持。

因此,不要使用混合流,而是将其配置为interactive ASP.NET Core MVC client

new Client { ClientId = "mvc", ClientSecrets = { new Secret("secret".Sha256()) }, AllowedGrantTypes = GrantTypes.Code, RequireConsent = false, RequirePkce = true, // where to redirect to after login RedirectUris = { "http://localhost:5002/signin-oidc" }, // where to redirect to after logout PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" }, AllowedScopes = new List<string> { IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile } }

mvc客户端具有预期配置的位置:

.AddOpenIdConnect("oidc", options => { options.Authority = "http://localhost:5000"; options.RequireHttpsMetadata = false; options.ClientId = "mvc"; options.ClientSecret = "secret"; options.ResponseType = "code"; options.SaveTokens = true; });

[我也可以推荐Brock Allen的this post。这可能会回答您有关cookie的问题。您也可以检查Dominick Baier的the post

有关如何使用刷新令牌的信息,请阅读my answer here

© www.soinside.com 2019 - 2024. All rights reserved.