OpenIDDictによる認証サーバの設定-パート6 -リフレッシュトークン


This article is part of a series called Setting up an Authorization Server with OpenIddict. The articles in this series will guide you through the process of setting up an OAuth2 + OpenID Connect authorization server on the the ASPNET Core platform using OpenIddict.






  • パートVI :リフレッシュトークン
  • ロビンソン / 認証サーバ


    OpenIDDictで実装された認証サーバ。


    アクセストークンは通常、セキュリティ上の理由で短い寿命を持っています.この部分では、リフレッシュトークンの使用を可能にします.リフレッシュトークンは、アプリケーションがユーザーを促すことなく新しいアクセストークンを取得することができます.

    リフレッシュトークンを有効にする


    まず、リフレッシュトークンフローを有効にする必要がありますStartup.cs :
    options
        .AllowAuthorizationCodeFlow()
            .RequireProofKeyForCodeExchange()
        .AllowClientCredentialsFlow()
        .AllowRefreshTokenFlow();
    
    中でトークン端点でAuthorizationController クライアントの資格情報リクエストを処理したり、アクセストークンの認証コードを交換したりするように、リフレッシュトークンリクエストを処理する必要があります.
    [HttpPost("~/connect/token")]
    public async Task<IActionResult> Exchange()
    {
        ...
    
        else if (request.IsAuthorizationCodeGrantType())
        {
            ...
        }
    
        else if (request.IsRefreshTokenGrantType())
        {
            // Retrieve the claims principal stored in the refresh token.
            claimsPrincipal = (await HttpContext.AuthenticateAsync(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme)).Principal;
        }
    
        ...
    }
    
    基本的に、我々はRequestTokenCityをリフレッシュトークンから取得するだけで、再度署名して、新しいアクセストークンを返す必要があります.
    最後に、クライアントがリフレッシュトークンを使用できるようにする必要があります.
    Permissions =
    {
        OpenIddictConstants.Permissions.Endpoints.Authorization,
        OpenIddictConstants.Permissions.Endpoints.Token,
    
        OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode,
        OpenIddictConstants.Permissions.GrantTypes.ClientCredentials,
        OpenIddictConstants.Permissions.GrantTypes.RefreshToken,
    
        OpenIddictConstants.Permissions.Prefixes.Scope + "api",
    
        OpenIddictConstants.Permissions.ResponseTypes.Code
    }
    
    クライアントがリフレッシュトークンを使用したい場合は、offline_access スコープ.我々が要求したようにopenid IDトークンのスコープ.さて、Postmanで新しいアクセストークンを要求すると、アクセストークンと共にリフレッシュトークンを受け取ります.
    その後、リフレッシュトークンを使用してPostmanで新しいアクセストークンを要求できます.ポストリクエストを送る/connect/token クライアント資格情報、グラントタイプともちろん、リフレッシュトークンを含む体で.

    応答では、新しいアクセストークンと新しいリフレッシュトークンを見つけるでしょう.したがって、リフレッシュトークンは自動的に回転します.そして、それは同じリフレッシュトークンを再利用するより安全です.