前回の記事 で Azure Web Apps の Easy Auth 情報をASP.NET Coreで受け取る - Azureの小ネタ (改) の続き的な記事で、Easy Authで受け取ったTokenでGraph APIをたたきたい場合です。
Easy Authで認証すると、X-MS-TOKEN-AAD-ACCESS-TOKEN
にToken情報が入ってきますが、このTokenを使ってGraph APIは叩けません。
Graph APIを叩けるTokenを得るには、以下の操作をする必要があります。
準備
1) リソースエクスプローラ https://resources.azure.com/ を開く
2) 以下までTreeを展開する
3) additionalLoginParams
を探して、以下のように定義し、POST(保存)します。
{ "additionalLoginParams": ["response_type=code id_token", "resource=https://graph.windows.net"], }
再度、アクセスすると、X-MS-TOKEN-AAD-ACCESS-TOKEN
の値がJWTぽく変わっていることがわかります。
https://jtw.ms/ あたりでデコードしてみると、audience に Graph API のURLが確認できます。
Graph API を graph.microsoft.com
にすることもできます。ただし、同時に複数のAudienceを指定することはできません。
アクセス例
以下は、↑と違って、graph.microsoft.com
にアクセスする例です。Graph API SDKをNugetでインストールしておいてください。
public async Task<IActionResult> GetMeAsync() { if (!this.HttpContext.Request.Headers.ContainsKey("X-MS-TOKEN-AAD-ACCESS-TOKEN")) { return Ok(); } var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(requestMessage => { requestMessage .Headers .Authorization = new AuthenticationHeaderValue("bearer", this.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"]); return Task.FromResult(0); })); var user = await graphServiceClient.Me.Request().GetAsync(); return new JsonResult(user); }
ブラウザで直接APIをたたくと、User情報のJSONが取得できると思います。
以上