.net – IdentityServer4 – 在遵循Hybrid MVC的快速入门之后使用刷新令牌

.net – IdentityServer4 – 在遵循Hybrid MVC的快速入门之后使用刷新令牌,第1张

概述我已经跟踪了文档页面中的Quickstart,并使用IdentityServer进行了三种服务(IdentityServer,一种Api服务,一种ASPNET MVC应用程序)的工作配置进行身份验证. 一切正常(登录,登录,授权等),直到access_token到期后1小时.此时,MVC应用程序开始(正确地)从API服务接收401(因为令牌已过期).那时,我知道我应该使用refresh_token 我已经跟踪了文档页面中的Quickstart,并使用IDentityServer进行了三种服务(IDentityServer,一种API服务,一种ASPNET MVC应用程序)的工作配置进行身份验证.

一切正常(登录,登录,授权等),直到access_token到期后1小时.此时,MVC应用程序开始(正确地)从API服务接收401(因为令牌已过期).那时,我知道我应该使用refresh_token来获取新的access_token.

我一直在寻找一种自动刷新access_token的机制,并偶然发现:https://github.com/mderriey/TokenRenewal/blob/master/src/MvcClient/Startup.cs(从this answer开始).我尝试使用它,但它不起作用(即使身份验证成功,TokenEndpointResponse也为null).

我理解如何使用refresh_token来获取新的access_token,但是在我拥有它之后,我将如何将其插回到cookie中以便将来的请求可以访问新的令牌?

解决方法 McvHybrID示例有一个很好的例子,可以将新的access_token和refresh_token恢复为主体.这是带有代码的github文件的 link,它位于RenewTokens()中,如下所示.
public async Task<IActionResult> RenewTokens()    {        var disco = await discoveryClIEnt.GetAsync(Constants.Authority);        if (disco.IsError) throw new Exception(disco.Error);        var tokenClIEnt = new TokenClIEnt(disco.TokenEndpoint,"mvc.hybrID","secret");        var rt = await     httpContext.Authentication.GetTokenAsync("refresh_token");        var tokenResult = await tokenClIEnt.RequestRefreshTokenAsync(rt);        if (!tokenResult.IsError)        {            var old_ID_token = await httpContext.Authentication.GetTokenAsync("ID_token");            var new_access_token = tokenResult.Accesstoken;            var new_refresh_token = tokenResult.RefreshToken;            var tokens = new List<AuthenticationToken>();            tokens.Add(new AuthenticationToken { name = OpenIDConnectParameternames.IDToken,Value = old_ID_token });            tokens.Add(new AuthenticationToken { name = OpenIDConnectParameternames.Accesstoken,Value = new_access_token });            tokens.Add(new AuthenticationToken { name = OpenIDConnectParameternames.RefreshToken,Value = new_refresh_token });            var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(tokenResult.ExpiresIn);            tokens.Add(new AuthenticationToken { name = "expires_at",Value = expiresAt.ToString("o",CultureInfo.InvariantCulture) });            var info = await httpContext.Authentication.GetAuthenticateInfoAsync("cookies");            info.PropertIEs.Storetokens(tokens);            await httpContext.Authentication.SignInAsync("cookies",info.Principal,info.PropertIEs);            return Redirect("~/Home/Secure");        }        VIEwData["Error"] = tokenResult.Error;        return VIEw("Error");    }
总结

以上是内存溢出为你收集整理的.net – IdentityServer4 – 在遵循Hybrid MVC的快速入门之后使用刷新令牌全部内容,希望文章能够帮你解决.net – IdentityServer4 – 在遵循Hybrid MVC的快速入门之后使用刷新令牌所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存