web-dev-qa-db-ja.com

Microsoft Graphのトーク​​ンを更新する方法

以下を使用してMicrosoft Graphに接続しています:

public GraphServiceClient GetAuthenticatedClient(string token)
{
    GraphServiceClient graphClient = new GraphServiceClient(
        new DelegateAuthenticationProvider(
            async (requestMessage) =>
            {
                // Append the access token to the request.
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
            }));
    return graphClient;
}

このコードをサーバーで実行しています。使用しているトークンが外部アプリから送信されています。

最初の1時間はすべて正常に機能し、その後トークンが期限切れになります。

私の質問は:更新トークンにもアクセスできるので、新しいトークンを取得するにはどうすればよいですか?

7
Hugo Hilário

更新トークンを有効にするには、次の2つの要素が必要です。

  1. スコープoffline_accessをリクエストする必要があります。これは、refresh_tokenおよび関連するメタデータとともにaccess_tokenを提供するようにエンドポイントに指示します。

  2. 同じPOSTからaccess_tokenをわずかに異なるボディ-refresh_tokenで繰り返すことにより、新しい/common/oauth2/v2.0/token(およびgrant_typeが一緒になると)をリクエストする必要がありますはrefresh_tokenに設定され、codeの代わりにrefresh_tokenプロパティと値を指定します。

    https://login.microsoftonline.com/common/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=refresh_token&
    refresh_token=[REFRESH TOKEN]&
    client_id=[APPLICATION ID]&
    client_secret=[PASSWORD]&
    scope=[SCOPE]&
    redirect_uri=[REDIRECT URI]
    

しばらく前に私はショーを書きました v2エンドポイントのプライマー も参考になると思います。

4
Marc LaFleur

これを行う方法はありますが、ADAL.NET 2.xからMSAL.NET 2.xへの移行シナリオでのみ推奨されます。ここでは、 https://github.com/AzureAD/Microsoft-authentication -library-for-dotnet/wiki/Adal-to-Msal

クライアント認証情報のみ(認証コードではない)。

0
Frederick Lin

これは、refreshTokenがないときに役立ちました https://docs.Microsoft.com/en-gb/Azure/active-directory/develop/v2-oauth2-on-behalf-of-flow

POST /oauth2/v2.0/token HTTP/1.1 Host: login.microsoftonline.com 
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer  
&client_id=2846f71b-a7a4-4987-bab3-760f389 
&client_secret=BYyVnAt56JpLwUcyo47XODd 
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs...pa970UvdVfQ 
&scope=https://graph.Microsoft.com/user.read+offline_access 
&requested_token_use=on_behalf_of

サンプル応答:

{
    "token_type": "Bearer",
    "scope": "User.Read Mail.Read Mail.Send Calendars.Read",
    "expires_in": 3600,
    "ext_expires_in": 3600,
    "access_token": "EwCAA8l6BAAUO9chh8cJscQLmU+LSWpbnr0v...ZgNcrJkgI=",
    "refresh_token": "MCS3KUzqyCY6rQH*NXLSLQctqj47w...x3Oa4r"
}