IdentityServer4 - 刷新令牌混合流程 - Cookie 和存储
Posted
技术标签:
【中文标题】IdentityServer4 - 刷新令牌混合流程 - Cookie 和存储【英文标题】:IdentityServer4 - Refresh Tokens Hybrid Flow - Cookies and storage 【发布时间】:2020-02-14 12:17:53 【问题描述】:我已关注 Quickstart Hybrid Flow here,但我需要一些有关在使用刷新令牌后保存令牌的帮助和建议。
如果我说的是真的,选项 SaveTokens 允许将令牌保存在 cookie 中。
首先,将访问和刷新令牌存储在 cookie 中是否是个好主意(关于安全性的担忧)?
其他问题,我通过代码正确检索刷新令牌
var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
但是现在,当我获得新的访问令牌时,我该如何存储它(没有 SetTokenAsync
方法)?...因为没有它,当我调用 var refreshToken = await HttpContext.GetTokenAsync("access_token");
时我会检索旧的访问令牌而我想得到新的。
谢谢
【问题讨论】:
看一下我的回答here的信息。 谢谢,它帮助我在使用刷新令牌后保存令牌(访问和刷新)。您对将它们保存在 cookie 中(安全与否)有什么看法……在这个流程中使用 PKCE 有用吗? 【参考方案1】:来自documentation:
交互式客户端应使用基于授权码的流程。到 防止代码替换,无论是混合流还是 PKCE 都应该 使用。
因此,PKCE 和混合流的组合是不必要的,而且可能没有用。
如果 PKCE 可用,这是解决问题的更简单的方法。
PKCE 已经是原生应用的官方推荐 和 SPA - 并且默认情况下也会发布 ASP.NET Core 3 OpenID 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。
【讨论】:
以上是关于IdentityServer4 - 刷新令牌混合流程 - Cookie 和存储的主要内容,如果未能解决你的问题,请参考以下文章
IdentityServer4示例之切换到混合流并且添加API访问
IdentityServer4 参考访问令牌有时作为 JWT 令牌传输
如何测试我的令牌是不是使用 IdentityServer4 刷新?