ローカルでデバッグ実行したWebアプリをAzure ADでSAML認証してみた

# はじめに
ASP .net coreで開発したWebアプリをローカルで実行する。
実行したアプリにAzure ADによるSAML認証を実行する。

# プログラム
下記のPGに書いてある通りのサンプルプログラムを作成します。

https://qiita.com/urushibata/items/85eb2d0e25b3cd290e14#saml%E8%A8%AD%E5%AE%9A

↓ASP .net core web app(MVC)ではなく、ASP .net core web appなので注意！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/6548e0e9-35c1-565a-4b7f-deac1fed5c03.png)


Nugetに関しても同じものを入れておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/6dfda339-06fa-1588-b66d-8880a908b97c.png)

ソリューションの構成としては以下の通りになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/af5fa8ae-cc6e-2be0-48d3-cfe6f2691529.png)


ただし、`appsettings.json`の`IdPMetadata`に関してはAzureAD構築後に設定するのでいじらなくてよい。

# Azure AD設定
Azure PortalでAzure ADを作成して、Enterprise applications>App applicationsの画面でNew applicationを押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/ff46c9fe-aff0-675b-e3dc-0675dd8c0c81.png)

`Create your own application`を押下してアプリケーションを作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/8dc589df-a498-f9bf-71e9-56a2fcaa95e7.png)

`Set up single sign on`を選択

`SAML`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/43d4ed92-f27f-509a-70a4-40cf60757859.png)

### Basic SAML Configuration

* Identifier (Entity ID)
アプリを特定可能なIDを入力。
プログラム側のappsetting.jsonのIssuerに対応する。

* Reply URL (Assertion Consumer Service URL)
ローカルでプログラムをデバッグしてみて、URLを確かめる。
URLに`/Auth/AssertionConsumerService`を付与したURLを入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/143197ec-e7a1-0628-807f-aca3c37a96d4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/3c1378bd-ea73-8ad6-5ba1-8ef77b17dc6e.png)

* SAML Certificates

`App Federation Metadata Url`のURL(metadata URL)をコピーしてプログラムの`appsettings.json`の`IdPMetadata`に貼り付ける。
また、`appsettings.json`の`Issuer`をBasic SAML Configuration>Identifier (Entity ID)と同じにする。

ここまで作成できたら、Azure ADにユーザを追加する。
一旦AzureADのトップ画面に戻って、Usersを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/4149483c-c121-389b-870a-4bac2fa788bd.png)

New Userを選択。

↓こんな感じでユーザを登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/2f0c169e-315f-499d-c18e-976a2700477b.png)

AzureAD>Enterprise applications>App applicationsの画面で作成したIdentifier(Entity ID)を選択。
Manage>Users and groups>Add user/group

↓こんな感じで、作成したユーザを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/86de80a2-2fb9-fe91-6387-f6db1075957d.png)

# プログラム動作確認
プログラムをデバッグする。
↓Loginを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/9f4ae83d-f850-101e-3ba7-34b44de9baf8.png)

Azure ADにリダイレクトされる。


↓作成したユーザのメールアドレスを入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/7a798ecd-036c-15f3-c2ea-508903f828e3.png)

↓ここで、Identifier(Entity ID)へのユーザの割当をしていないと、以下のようなエラーがでてくる。
```
AADSTS50105: Your administrator has configured the application saml_sample_2
('6XXXXXXXXXXXXXXXXXXXXX') to block users unless they are specifically granted ('assigned') 
access to the application. The signed in user 'testuser1@XXXXXXXXXXXXXXXXXXXXXXXXXXXX.onmicrosoft.com' is blocked
 because they are not a direct member of a group with access,
 nor had access directly assigned by an administrator. Please contact your
 administrator to assign access to this application.
```

↓の質問を聞かれたらAsk Laterを選択。
```
Action Required Your organization requires additional security information. 
Follow the prompts to download and set up the Microsoft Authenticator app.
```

Stay sign inはNoを選択。

# 結果
↓SAML認証した属性情報をプログラムに読み込みできている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378457/a20a5078-2d6a-ca76-616e-e70933b4f604.png)


# 参考
https://qiita.com/urushibata/items/85eb2d0e25b3cd290e14#saml%E8%A8%AD%E5%AE%9A