栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

OWIN安全性-如何实现OAuth2刷新令牌

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OWIN安全性-如何实现OAuth2刷新令牌

刚刚使用Bearer(以下称为access_token)和Refresh
Tokens实现了我的OWIN服务。我对此的见解是,您可以使用不同的流程。因此,这取决于您要使用的流程来设置access_token和refresh_token到期时间。

我将在下面描述两个 流程 AB (我建议您要拥有的是流程B):

A)
access_token和refresh_token的到期时间与默认情况下的1200秒或20分钟相同。此流程需要您的客户端首先发送带有登录数据的client_id和client_secret以获得access_token,refresh_token和expiration_time。借助refresh_token,现在可以在20分钟内获取一个新的access_token(或在OAuthAuthorizationServerOptions中将AccessTokenExpireTimeSpan设置为的任何值)。由于access_token和refresh_token的到期时间相同,因此您的客户有责任在到期之前获得新的access_token!例如,您的客户端可以使用主体向令牌端点发送刷新POST调用(备注:您应在生产环境中使用https)

grant_type=refresh_token&client_id=xxxxxx&refresh_token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxx

例如在19分钟后获得新令牌,以防止令牌过期。

B)
在此流程中,您希望access_token的短期到期,而refresh_token的长期到期。假设出于测试目的,您将access_token设置为在10秒(

AccessTokenExpireTimeSpan=TimeSpan.FromSeconds(10)
)内到期,并将refresh_token设置为5分钟。现在涉及到设置refresh_token的到期时间的有趣部分:您可以在SimpleRefreshTokenProvider类的createAsync函数中执行以下操作:

var guid = Guid.NewGuid().ToString();        //copy properties and set the desired lifetime of refresh token        var refreshTokenProperties = new AuthenticationProperties(context.Ticket.Properties.Dictionary)        { IssuedUtc = context.Ticket.Properties.IssuedUtc, ExpiresUtc = DateTime.UtcNow.AddMinutes(5) //SET DATETIME to 5 Minutes //ExpiresUtc = DateTime.UtcNow.AddMonths(3)         };                var refreshTokenTicket = new AuthenticationTicket(context.Ticket.Identity, refreshTokenProperties);        //saving the new refreshTokenTicket to a local var of Type ConcurrentDictionary<string,AuthenticationTicket>        // consider storing only the hash of the handle        RefreshTokens.TryAdd(guid, refreshTokenTicket);         context.SetToken(guid);

现在,您的客户端可以在令牌

access_token
过期时将带有refresh_token的POST调用发送到令牌端点。调用的正文部分可能如下所示:
grant_type=refresh_token&client_id=xxxxxx&refresh_token=xxxxxxxx-xxxx-xxxx-xxxx-xx

重要的一件事是,您不仅可能要在CreateAsync函数中使用此代码,而且还希望在Create函数中使用此代码。因此,您应该考虑为上述代码使用自己的函数(例如,称为CreateTokenInternal)。
在这里,您可以找到包括refresh_token流(但未设置refresh_token的到期时间)在内的不同流的实现。

这是GitHub上IAuthenticationTokenProvider的一个示例实现(设置了refresh_token的到期时间)

很抱歉,除了OAuth规范和Microsoft API文档之外,我无法提供更多其他材料。我会在此处发布链接,但我的声誉不允许我发布超过2个链接…。

我希望这可以帮助其他人在尝试实现OAuth2.0时的空闲时间,而OAuth2.0的refresh_token过期时间与access_token过期时间不同。我无法在网络上找到示例实现(除了上面链接的thinktecture之一),这花了我几个小时的研究才对我有用。

新信息:就我而言,我有两种不同的接收令牌的可能性。一种是接收有效的access_token。在这里,我必须发送一个带有String主体的POST调用,格式为application
/ x-www-form-urlenpre,并带有以下数据

client_id=YOURCLIENTID&grant_type=password&username=YOURUSERNAME&password=YOURPASSWORD

其次是如果access_token不再有效,我们可以尝试通过发送POST调用来尝试refresh_token,该调用的字符串格式

application/x-www-form-urlenpred
为以下数据
grant_type=refresh_token&client_id=YOURCLIENTID&refresh_token=YOURREFRESHTOKENGUID



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号