几分钟后,Web api bearer令牌超时

时间:2016-02-20 13:23:21

标签: c# asp.net-mvc asp.net-web-api oauth access-token

我正在使用asp.net web api和基于令牌的身份验证。我的令牌选项将成功令牌过期时间设置为14天后。

return view('page')->withErrors($v->errors());

我生成的令牌就是这样。

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new SimpleAuthorizationServerProvider(),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    // In production mode set AllowInsecureHttp = false
    AllowInsecureHttp = true
};

我将此信息保存在Cookie中并在我的应用程序中使用。但几分钟后我的访问令牌验证即将到期,401 http错误。

我正在尝试从Fiddler和邮递员那里获取请求,但却给出了401授权错误。

1 个答案:

答案 0 :(得分:9)

从这篇文章:ASP.NET Web API Authorization tokens expiring early

看起来每次应用程序池被回收时,都会重新生成用于加密和解密令牌的计算机密钥,导致我们的应用程序无法解密以前加密的令牌。尝试按照帖子中的建议设置固定的机器密钥。

旁注:

从应用程序设计的角度来看,我们不应该为访问令牌设置很大的时间跨度,访问令牌应该是短暂的并与刷新令牌一起使用:Why Does OAuth v2 Have Both Access and Refresh Tokens?

要在owin中生成刷新令牌,请向RefreshTokenProvider提供OAuthAuthorizationServerOptions

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new SimpleAuthorizationServerProvider(),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    // In production mode set AllowInsecureHttp = false
    AllowInsecureHttp = true,

    RefreshTokenProvider = //your refresh token provider.
};