5

API を保護するために OAuth Bearer トークンを使用しているとしましょう。私たちのためにそれを行う OWIN ミドルウェアを備えた NuGet パッケージがあります: https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth

アクセス トークンの有効期限について疑問が生じるまでは、Eveethig は良さそうです。私が理解している限り、3つの基本的な方法があります。

  1. アクセス トークンの有効期限を非常に長くする (たとえば 1 か月)
  2. 認証サーバーとユーザー アプリケーション コードの両方に多くの困難を追加する OAuth 更新トークンを使用します (次の記事http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-で説明)。 asp-net-web-api-2-owin/ )

もうすぐ期限切れになるアクセストークンを必要とするエンドポイントを作成し、新しいアクセストークンで応答して、OAuth アクセストークンのスライド式有効期限をシミュレートすることは可能ですか?

4

1 に答える 1

1

警告!アクセス トークンが危険にさらされないこと (たとえば、XSS の脆弱性によりアクセス トークンを盗むことができる) をアプリケーションが保証する (これは不可能です) ことを 100% 確信できない場合は、誰も使用すべきではないソリューションを次に示します。このソリューションでは、アクセストークンが漏洩すると、アクセスを無期限に延長するために使用できます。OAuth リフレッシュ トークンはまさにこの問題を解決し、アクセス トークンが侵害された場合にアクセスを非常に短い時間 (通常は約 15 分) で制限します。

[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)
        };
    }
}
于 2015-04-09T20:38:30.310 に答える