我遵循了Quickstart Hybrid Flow here,但在使用刷新令牌后需要一些有关保存令牌的帮助和建议。
如果我说的是真的,则选项[[SaveTokens允许将令牌保存在cookie中。
[首先,将访问和刷新令牌存储在cookie中(对安全性的担忧)是一个好主意吗?其他问题,我通过代码正确检索了刷新令牌var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
,但是现在,当我获得新的访问令牌时,如何存储它(没有SetTokenAsync
方法)?...因为没有那样的话,我会在调用var refreshToken = await HttpContext.GetTokenAsync("access_token");
时检索旧的acces令牌,而我想获取新的。
谢谢
交互式客户端应使用基于授权码的流程。至防止代码替换,混合流或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。