.net - IdentityServer4 - 刷新令牌混合流程 - Cookie 和存储
问题描述
我在这里关注了 Quickstart Hybrid Flow,但我需要一些关于在使用刷新令牌后保存令牌的帮助和建议。
如果我说真的,SaveTokens选项允许将令牌保存在 cookie 中。
首先,将访问和刷新令牌存储在 cookie 中是否是个好主意(关于安全性的担忧)?
其他问题,我通过代码正确检索刷新令牌,
var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
但是现在,当我获得新的访问令牌时,如何存储它(没有SetTokenAsync
方法)?...因为没有它,我在调用时检索旧的访问令牌,var refreshToken = await HttpContext.GetTokenAsync("access_token");
而我想买新的。
谢谢
解决方案
从文档中:
交互式客户端应使用基于授权代码的流程。为了防止代码替换,应使用混合流或 PKCE。
因此,PKCE 和混合流的组合不是必需的,也可能没有用。
如果 PKCE 可用,这是解决问题的更简单的方法。
PKCE 已经是本机应用程序和 SPA 的官方推荐 - 随着 ASP.NET Core 3 的发布,OpenID Connect 处理程序也默认支持。
因此,不要使用混合流,而是将其配置为交互式 ASP.NET Core MVC 客户端。
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的这篇文章。这可能会回答您关于 cookie 的问题。你也可以查看Dominick Baier的帖子。
有关如何使用刷新令牌的信息,请在此处阅读我的回答。
推荐阅读
- video - pyav / ffmpeg / libav 访问端数据而不解码视频
- c - 扭曲个人 __VA_ARGS__
- javascript - 为什么 axios 忽略 .then?
- python - 结构模式匹配 Python - 匹配集合 / Frozenset
- node.js - TypeError:OAuth2Strategy 需要一个 clientID 选项
- java - 如何检查用户输入是否与二维数组的元素匹配?爪哇
- python - 如何使用 pyrebase 将文件从 firebase 存储下载到特定目录
- visual-studio - 中文视觉工作室 sln 字符翻译成英文
- python - 重新格式化熊猫数据框
- java - 在 Intellij 的 Java gradle 项目中设置断点