【Entra ID ハンズオン】OktaをSP、EntraIDをIdPにしたSAML設定

# 1.はじめに

**無料でできるEntra IDによるSSO手順**シリーズの番外編です。

https://qiita.com/mokonacl/items/46ba1483341e8eb1ea39

**Entra IDをIdP(IDプロバイダー)にしたSAML認証時のSP(サービスプロバイダー)に、Okta**を設定してみる記事となっています。

Oktaといえば、IDaaSの有名製品の１つですが、実はSPとしても動作させることができます。具体的には、Entra IDのエンタープライズアプリケーション（Entra IDと連携設定済みのSaaS)に、Oktaを設定することができます。例えば、Entra IDによる認証をさせることで、そのままOktaにアクセスさせることができます。そして、Oktaのログインフォーム入力時に、Entra IDにリダイレクトして、認証をさせることも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/024051c3-5897-bb1e-227e-ad1c328ca6ca.png)


# 2.Okta Developer Edition

### 2-1.Okta Developer Editionとは
Okta Developer Editionとは、oktaの開発者向け環境です。なんとクレジットカード登録なしで、利用期限の制限もなく、さまざまなoktaの機能を利用することができるプランとなります。
私が気になる制約事項としては、SSOする状態がアクティブなアプリケーション数は、最大５個までという点くらいです。一応、アプリケーションのSSOの設定をしていても、インアクティブにしておけば、**制限対象の対象外**にはなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0c073c25-ce58-76e1-a1ed-0babf3491493.png)
<br>

https://support.okta.com/help/s/article/developer-okta-tenant-applications-limit?language=en_US


### 2-2.Okta Developer の登録
それでは、Okta Developer の登録をしていきます。Business用のドメインを取得しているメアド、または、Google Account、Githubアカウントを事前に用意しておいて下さい。
以下URLにアクセスし、「Sign up free for Developer Edition」を選択します。

　https://developer.okta.com/signup/

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/15bf14e6-2d57-8acd-2c6d-c42663224621.png)
<br>

私の場合は、GitHubのアカウントがあったので、Githubのボタンをクリックして、進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/950ec38b-fde6-5923-3902-c928f03893df.png)
<br>

住んでいる国情報を入れて、「Continue」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a9afe221-98e6-d6b3-7dcf-d2ac74561c29.png)
<br>

Githubの認証画面に遷移しますので、必要情報を入力して、github側の認証は完了させましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/faae3d40-3a05-af29-4742-db05690aeeab.png)
<br>

しかし、このままではアクセスすることはできませんでした。
理由は、oktaの管理者向けコンソールに対するAuthentication Policyの設定が多要素になっているためとなります。今回のようなIdPによる認証だけだと、単一要素という判定になってしまい、アクセスNGとなりました。実際には、githubの認証時に多要素にはなっていますが、仕方ないですね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5042ea99-3f22-48ba-a0e1-d221af830d10.png)
<br>

次に、githubとリンクしているメールアドレスのメール受信箱を確認すると、oktaからwelcome mailが届いていました。こちらのSign inだと先ほどのようにアクセスできないので、「Set password」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/c7096b36-dfc8-667d-59e2-9b96bcdcda3a.png)
<br>

すると、今回は無事oktaの管理者コンソール画面にアクセスすることができました。
しかし、このままだと、7日後には「Set password」からアクセスすることができなくなるので、Github側の認証が多要素になっているので、Authentication Policiesの設定を変更しておきます。
「Security > Authentication Policies」を選択し、「Okta Admin Console」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/54fc89aa-7910-4953-7330-47a53febaec1.png)
<br>

Priorityが１になっているポリシーの「Edit」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/00265b8b-b7b2-c6a5-cc95-fe801fb4e7cf.png)
<br>


THENの「User must authenticate with」を「Any 1 factor type / IdP」に変更し、「Save」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/94bbf433-31b3-5f1f-ad47-b9f3b896b5e4.png)


# 3.OktaをSP、Entra IDをIdPとしたSAML設定
ここからは、OktaをSP、Entra IDをIdPとしたSAML設定手順になります。
なお、最初はOIDC（OpenID Connect）利用した構成で作ろうとしたのですが、うまく作れなかったのですが、以下nextmodeさんの記事を参考にさせていただき、SAMLで設定を実施しました。

https://info.nextmode.co.jp/blog/okta-azure-active-directory2


### 3-1.設定手順：アプリ登録
Entara管理センターに移動し、「アプリケーション > エンタープライズアプリケーション > 独自のアプリケーションの作成 」を選択します。そして、任意の名前を登録して、作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1c07a1c2-e7d2-b060-fcde-90cde50e7181.png)
<br>

「シングルサインオン > SAML」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5b90f88c-40dd-cb72-1012-141eb1f0fecb.png)
<br>

「基本的なSAML構成の編集」を選択します。ここには、oktaのエンティティIDや応答URLを入力する必要があるのですが、Entra ID側から発行された証明書がないと、oktaのエンティティIDや応答URLを生成することができません。そのため、後から変更することを前提にして、仮の情報をエンティティIDと応答URLに入力して、「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5607dfc1-156c-a7f8-3153-5c95f00c2108.png)
<br>

上記入力を実施すると、「3 SAML証明書」のところで、「証明書(Base64)」の「ダウンロード」を選択できるようになりますので、証明書ファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/304aaeeb-6482-9ce3-39a2-ba7a48ec7d23.png)
<br>

Oktaの管理者コンソールに移動し、 「Security > identity Providers > Add identity provider」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0d113b13-d263-7041-d8cf-fbd033006a9b.png)
<br>

「SAML 2.0 IdP」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/70d6a9a7-06d6-9653-8860-ede9016d4d4a.png)
<br>

以下の対応関係で入力していきます。デフォルト値はそのままにしています。
IdP Signature Certificateには、Entra管理センターでダウンロードした証明書をアップロードしましょう。
<table>
  <thead>
    <tr>
      <th>項目</th>
      <th>入力値</th>
    </tr>
  </thead>
  <tr>
    <td>IdP Usage</td>
    <td>SSO only</td>
  </tr>
  <tr>
    <td>IdP username</td>
    <td>idpuser.email 　※仮入力。後で変更</td>
  </tr>
  <tr>
    <td>If no match is found</td>
    <td>Create new user(JIT)</td>
  </tr>
  <tr>
    <td>IdP Issuer URI</td>
    <td>[Entra管理センター上のMicrosoft Entra 識別子]　※固有情報</td>
  </tr>
  <tr>
    <td>IdP Single Sign-On URL</td>
    <td>[Entra管理センター上のログイン URL]　※固有情報</td>
  </tr>
  <tr>
    <td>Request Binding</td>
    <td>HTTP POST</td>
  </tr>
</table>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/addc66dd-e02a-e712-dd00-bc45f2ef3791.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/7db3e25e-2fc7-a572-8fb4-12556ada7eaf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8aafccd2-eab8-3122-2845-b662f12544d4.png)

<br>

作成が完了しますと、Summaryが表示され、「Assertion Consumer Service URL」と「Audience URI」が生成されます。
この「Audience URI」を「Entra管理センター上の基本的なSAML構成」の「識別子(エンティティID)」に入力し、「Assertion Consumer Service URL」を「Entra管理センター上の基本的なSAML構成」の「応答URL（Assertion Consumer Service URL)」に入力します。入力が完了しました。
忘れずに、「保存」を押して、再び、oktaの管理コンソールに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/b8251bf0-3f11-a99e-3053-1472c83249d1.png)
<br>

### 3-2.設定手順：属性のマッピング
oktaの管理コンソールで、作成したIdPの 「Actions > Edit Profile and Mappings」 をクリックし、「Attributes > Mappings]」の画面へ進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/7ae6930d-651b-a859-c613-2a93f066187e.png)
<br>

Entra IDからoktaへのマッピングは、最初は以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e186689e-f654-8d61-55dd-fa4812e1a90a.png)
<br>

これを「source.userName」だけ残し、すべて停止させます。設定変更後は、以下のようになりますが、後で再度設定しなおします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/6f8b0ac7-b200-8609-610a-4272b31bea24.png)
<br>

次は、「Custom」からすべての項目を消します。
もし既存のProfileと関連づいていることで消せない場合は、サイドメニューのProfile Editorから、消せない原因となっているProfileを探して、消す必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/167b156e-b441-5d31-0f59-4a9e69b1ebdf.png)
<br>

削除後は、以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/4f57b870-d913-6188-bc65-7574d3fd6629.png)
<br>

一度Entra管理センターに戻り、マッピングさせたい属性を確認します。「属性とクレーム」のところで、各クレーム名のメモをとります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ec461986-8592-820a-e094-b020bfc24d4a.png)

Oktaの管理コンソールに戻り、「+ Add Attribute」を選択し、属性を４つ追加します。

例：UPNの場合
Display name：upn
variable name：upn
External name：http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8ed9640b-09c2-0ce3-3bc2-a391acb8d55e.png)
<br>

作成後は、以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8c0d4b5f-fda2-63eb-8df5-e7f9bf24cca4.png)
<br>

「Attributes > Mappings」 の画面へ進み、先ほど作ったカスタム属性を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8e4f2dab-4e48-4dec-3093-4910fb8d34f7.png)
<br>

最後に、仮で入れておいたIdPからログインする際のマッピングを、[メールアドレス] から [UPN] に変更します。「Identity Providers > Actions > configure Identity Provider」に移動し、IdP usernameの項目を「idpuser.upn」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5f53a538-ba12-124f-a87b-06f819d39db6.png)
<br>

### 3-3.動作確認：IdP initiated SSO
これで、Entra IDを起点にしたSAML認証で、oktaにログインすることが可能となります。
M365のマイアプリより、oktaを選択してログインしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/13656d20-f0f7-d9af-a4d5-7e3b65c39840.png)
<br>

以下のようにOktaにログインすることができました。なお、この時点では、JITプロビジョニングでユーザを作成してログインしただけなので、後で、アプリの割り当てなどを実施する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/f54bf531-abcb-5951-cea6-26f1a33e04a5.png)
<br>

### 3-4.設定手順：SP initiated SSO
ここまででSAML設定自体は完了していますが、oktaのログインフォームで直接ログインすることはまだできません。そのため、oktaへのログインフォームで、Entra ID側の認証へとルーティングする設定をします。

「Security > Identity Provider > Routing rules」に移動し、「Add Routing Rule」を選択します。
そして、任意のRul Nameを入力し、「User matches」に「Domain list on login」を選択し、対象となるドメイン名を入力します。
例えば、ログインユーザが、 user@example.com だった場合は、example.com 部分を入力します。
そして、Identity Providerには、今回作成したIdentity Providerを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/06c6e427-b4d6-ab19-e61e-2eccff9d056f.png)
<br>

「Create rule > Activate」を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/90e6e096-0603-c97e-2bf6-3ea84d4737de.png)
<br>

完了すると、以下のようなRuting rulesになります。
これによって、特定のドメインユーザは、Entra IDにフェデレーションされて認証されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/3c256c1f-3208-f89e-eadd-c209ef8a1d2e.png)
<br>

### 3-5.動作確認：SP initiated SSO

それでは、oktaのログインフォームにユーザ名を入力してみましょう。
するとユーザ名を入力すると、Entra IDの認証に遷移し、必要情報を入力後には、Oktaにログインすることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/97678f21-ddf2-d77d-a2a4-ee9dc8e446f9.png)
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/46c271ce-be14-d66c-bbb1-cc2921c31e24.png)


# 4.おわりに
Entra IDによるSAML認証の番外編として、OktaをSPにした場合の設定手順を確認しました。
Entra ID側の設定はいつも通りな気もしますが、okta側の設定も多々あり、属性のマッピングも考慮するとなかなか難しい面があったのではないでしょうか。
次回は、OktaをIdPにして、Entra ID(O365)側をSPにしたフェデレーション構成を記事にしたいと思います。リンクは下記です。

https://qiita.com/mokonacl/items/0e108e3adc48b5dd012d