以下を使用して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時間はすべて正常に機能し、その後トークンが期限切れになります。
私の質問は:更新トークンにもアクセスできるので、新しいトークンを取得するにはどうすればよいですか?
更新トークンを有効にするには、次の2つの要素が必要です。
スコープoffline_access
をリクエストする必要があります。これは、refresh_token
および関連するメタデータとともにaccess_token
を提供するようにエンドポイントに指示します。
同じ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エンドポイントのプライマー も参考になると思います。
これを行う方法はありますが、ADAL.NET 2.xからMSAL.NET 2.xへの移行シナリオでのみ推奨されます。ここでは、 https://github.com/AzureAD/Microsoft-authentication -library-for-dotnet/wiki/Adal-to-Msal
クライアント認証情報のみ(認証コードではない)。
これは、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"
}