当前位置: 首页 > 知识库问答 >
问题:

OAuth承载访问令牌滑动到期

满勇军
2023-03-14

假设我们使用OAuth承载令牌来保护API。有一个带有OWIN中间件的NuGet包可以为我们做到这一点:https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth.

Everethig看起来很棒,直到提出访问令牌过期的问题——我们不想强迫用户一次又一次地重新登录。据我所知,有三种基本方法:

  1. 使访问令牌到期时间非常长(例如1个月)
  2. 使用OAuth刷新令牌会给身份验证服务器和用户应用程序代码(在下面的文章中描述)增加很多困难http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-html" target="_blank">angularjs-app-using-asp-net-web-api-2-owin/)

我很好奇是否有可能创建需要即将过期的访问令牌的endpoint,并使用新的访问令牌来模拟OAuth访问令牌的滑动过期?

共有1个答案

归翔
2023-03-14

警告!如果您不能100%确定您的应用程序保证(这是不可能的)无法计算Access Token(例如,XSS漏洞允许窃取Access Token),则没有人应该使用这个解决方案。在这个解决方案中,一旦Access Token泄露,它就可以用来无限期地延长访问时间。OAuth刷新令牌正好解决了这个问题,在非常短的时间内(通常大约15分钟)危及Access Token的情况下限制访问。

[Authorize]
public class RefreshTokenController : ApiController
{
    [HttpGet]
    public HttpResponseMessage ReissueToken()
    {
        // just use old identity
        var identity = ((ClaimsPrincipal)User).Identity as ClaimsIdentity;

        var ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
        DateTimeOffset currentUtc = new SystemClock().UtcNow;

        ticket.Properties.IssuedUtc = currentUtc;
        ticket.Properties.ExpiresUtc = currentUtc.AddMinutes(30);

        string token = Startup.OAuthBearerAuthOptions.AccessTokenFormat.Protect(ticket);

        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ObjectContent<object>(new
            {
                accessToken = token,
                expiresIn = (int)((ticket.Properties.ExpiresUtc.Value - ticket.Properties.IssuedUtc.Value).TotalSeconds),
            }, Configuration.Formatters.JsonFormatter)
        };
    }
}
 类似资料:
  • 本文向大家介绍oauth 刷新访问令牌,包括了oauth 刷新访问令牌的使用技巧和注意事项,需要的朋友参考一下 示例 资源

  • null 很抱歉太啰嗦了。 提前谢了。

  • 我正在尝试在ASP.NET5中实现OAuth承载令牌身份验证,并且正在努力寻找一个如何实现这一点的示例,因为OWIN的东西在ASP.NET5中发生了变化。 例如IApplicationBuilder.UseOAuthAuthorizationServer()和IApplicationBuilder。UseOAuthBearerAuthentication()要么不再存在,要么缺少引用? 如有任何指

  • 在一个脚本中,我试图用oauth令牌克隆Github存储库。 根据本教程: https://github.com/blog/1270-easier-builds-and-deployments-using-git-over-https-and-oauth 我应该能够像这样为它构建一个命令: 如果我使用正确的访问令牌手动尝试此操作,它仍会询问我的密码。 如果我在命令行上尝试它,我只是得到一个没有找到

  • 我遇到了很多文章,很多文章建议使用OAuth over API密钥。据我所知,在OAuth中,我们最终获得了访问令牌,它的有效期为很多天。例如,QuickBooks online OAuth令牌的有效期为6个月。 因此,访问令牌等同于API Key。无论谁得到它,都应该像API密钥一样保护它。OAuth调用应该通过HTTPS进行,类似于基于API Key的调用。 相对于OAuth的另一个优势是授权

  • 我知道有些人会发表评论,比如这篇文章重复了很多问题,但是我已经尝试了很多方法来在领英Oauth中实现访问令牌。解释我所尝试的。 1)我正在关注它的官方文档LinkedIn Oauth2 2) 我已成功从步骤 2 获取授权代码,并将该代码传递给步骤 3,以交换身份验证代码以获取访问令牌。但是我收到以下错误{“error_description”:“缺少必需参数,包含无效的参数值,参数不止一次。 :无