AzureAD を Okta から SSO しているときに他社 SharePoint でサインインループしたときの対処法
はじめに
Okta を IdP として Azure AD とフェデレーションし Okta から SSO できるようにして喜んでいたら、ユーザーから「他社の SharePoint Online にアクセスできなくなったんだけど…」と問い合わせを受けて冷や汗をかきながら対処したときの備忘録となります。
Okta と Azure AD のフェデレーションについては、thdy さんが詳しい記事を書かれているので興味ある方は読んでみてください。
何が起きたか
当該ユーザーからもらった他社 SharePoint のリンク(例: https://[[TENANT]].sharepoint.com/sites/Accounting/Home.aspx
)を開いてみると、サインインループが数回発生し最後に Microsoft のログイン画面で「サインインできませんでした。もう一度お試しください。」とエラーになることを確認しました。
該当ユーザーに Office ポータルを開いてもらうと正常にアクセスできることから、Okta と Azure AD 間のフェデレーションには問題がなさそうです。
対処法
解決方法を探して、Okta Help Center をさまよってると、以下のスレッドを見つけました。
この方法なら解決できそうです。
How do I send users directly to a Sharepoint Online site with Okta?
1. Okta の Office365 アプリケーションから PassiveLogOnUri を取得する
Okta の Office365 アプリケーションから「Sign On」タブを開き、「Set Up Instructions」ページを開きます。
コード内 に PassiveLogOnUri の記載があるのでこれを控えます。
https://[[Org]].okta.com/app/office365/[[Id]]/sso/wsfed/passive
2. PassiveLogOnUri にパラメーターを付与する
取得した PassiveLogOnUri に?wa=wsignin1.0&wtrealm=urn:federation:MicrosoftOnline&wctx=wa%3Dwsignin1.0%26wreply%3D
を足します。
https://[[Org]].okta.com/app/office365/[[Id]]/sso/wsfed/passive?wa=wsignin1.0&wtrealm=urn:federation:MicrosoftOnline&wctx=wa%3Dwsignin1.0%26wreply%3D
3. 接続先の SharePoint Online の URL を加工する
接続先の URL (https://[[TENANT]].sharepoint.com/sites/Accounting/Home.aspx
)を以下のように加工します。
https://[[TENANT]].sharepoint.com/_forms/default.aspx?ReturnUrl=/sites/Accounting/Home.aspx
次に、この URL を 2回 エンコードします。エンコードにはこのサイトを使いました。
https%253A%252F%252F[[TENANT]].sharepoint.com%252F_forms%252Fdefault.aspx%253FReturnUrl%253D%252Fsites%252FAccounting%252FHome.aspx
4. 手順 2 の URL と、手順 3 の文字列を結合する
そのままくっつけます。
https://[[Org]].okta.com/app/office365/[[Id]]/sso/wsfed/passive?wa=wsignin1.0&wtrealm=urn:federation:MicrosoftOnline&wctx=wa%3Dwsignin1.0%26wreply%3Dhttps%3A%2F%2F%5B%5BTENANT%5D%5D.sharepoint.com%2F_forms%2Fdefault.aspx%3FReturnUrl%3D%2Fsites%2FAccounting%2FHome.aspx
以上です。
ユーザーにこの URL を開くことでアクセスできるか確認してもらいます。
アクセスが確認できたらブックマークなどに登録してもらいましょう。
最後に
Okta から SSO できるようになったと思ったら思わぬ落とし穴がありました。
今回は URL を加工して直接開く方法でしたが、もしかしたら Okta 内の設定で解決できる方法があるかもしれません。
(情報待ってます。)
Discussion