---
lang: ja-jp
breaks: true
---
# 参考資料
> シナリオ:Web API を呼び出すデーモン アプリケーション
> https://learn.microsoft.com/ja-jp/azure/active-directory/develop/scenario-daemon-overview

## 概要
* リダイレクト URI は不要。
* 非対話型アプリケーションからアクセスする場合は、委任されたアクセス許可ではなく、「アプリケーションのアクセス許可」を設定する必要がある。
*
## Azure Active Directory の設定
* 
* WebAPIの「アプリロール」に「アプリケーション」を割り当てる
* 
* 
* 
* 
* ※上記の設定を行うことで、コンソールアプリ側で「アプリケーションのアクセス許可」を設定できるようになる。
* コンソールアプリを登録する
* 
* 
* 
* リダイレクトURIは未指定で良い
* 
* 
* コンソールアプリにAPIへのアクセス許可を設定する
* 
* 
* 
* 
* 
* 
* ※WebAPI側の設定で、アプリケーションロールを割り当てると「アプリケーションの許可」が選択できるようになる。
* 
* 
* 
* 
* 
* コンソールアプリにクライアントシークレットを追加する。
* 
* 
* 
* 
* 
* 
*
## サンプルプログラム `2-Call-OwnApi` で動作を検証する
> active-directory-dotnetcore-daemon-v2
/2-Call-OwnApi/
> https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/2-Call-OwnApi
### TodoList-WebApi(※WebAPI)
#### appsettings.json
```json=
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "WebAPIのアプリケーション (クライアント) ID",
"Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
"TenantId": "WebAPIのディレクトリ (テナント) ID"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
```
:::info
"Domain"は未設定でも動作した。
:::
#### TodoListController.cs
```csharp=
・・・
//[Authorize] // これを以下の`Roles`の設定に変更する必要がある。
[Authorize(Roles = "API.Console")]
[Route("api/[controller]")]
[ApiController]
public class TodoListController : ControllerBase
{
・・・
```
:::warning
`[Authorize]`のままだと、以下のように403となる。
```shell=
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET https://localhost:44372/api/TodoList - -
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[2]
Successfully validated the token.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed. These requirements were not met:
ScopeOrAppPermissionAuthorizationRequirement:Scope/AppPermission=
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[13]
AuthenticationScheme: Bearer was forbidden.
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/1.1 GET https://localhost:44372/api/TodoList - - - 403 0 - 976.1829ms
```
:::
:::warning
`[Authorize]`を単純にコメントアウトすると、認証が一切働かなくなる。
:::
### Daemon-Console(※コンソールアプリ)
#### appsettings.json
```json=
{
"Instance": "https://login.microsoftonline.com/{0}",
"Tenant": "コンソールアプリのディレクトリ (テナント) ID",
"ClientId": "コンソールアプリのアプリケーション (クライアント) ID",
"ClientSecret": "コンソールアプリのクライアントシークレットの値",
"TodoListBaseAddress": "https://localhost:44372",
"TodoListScope": "WebAPIのアプリケーション ID の URI/.default",
"Certificate": {}
}
```
:::warning
"TodoListScope"の末尾は、必ず`/.default`となっている必要がある。
:::
### 実行結果
