2019年6月10日月曜日

Sign In with AppleとのID連携現状のまとめ&Azure AD B2C連携

こんにちは、富士榮です。

WWDC'19でSign In with Appleが発表されてから皆Apple IDに夢中※1ですね。まぁ、アプリのレビューガイドライン問題※2とか色々とありますが、日本人は不思議とiPhoneが大好きなので下手したらGoogleアカウントより普及してるのかもしれません。(パスワードを覚えているかどうかは別でしょうけど)

※1.今日(6/9)時点で私が把握しているSign In with Apple関係の記事


※2.問題の概要
「サードパーティログイン採用のアプリはSign In with Appleを使うことを義務付ける」というレビューガイドラインが出たこと。Apple曰く、Relyingパーティに一切の個人情報を提供せずに認証だけを行うことができるためプライバシーに考慮している、という言いっぷりですが、逆にAppleが誰がどのアプリにログインしているかを把握するってこと?という気持ち悪い感じになっています。また、アプリ開発者はSign In with Appleを実装しなきゃダメ、という変な強権発動も流石Apple、という感じです。(個人の感想)


とは言え、Sign In with Appleが世の中に出てきたのでとりあえず色々とつないでみたくなります。私もAzure AD B2CとAuth0にはとりあえず繋いでみました。

というわけで、今回はAzure AD B2Cとのつなぎ方を解説します。
(先に書いた英語版のblogの日本語訳です)

********************
WWDC'19でアップルが「Sign In with Apple」という機能を公表しました。このポストではこの新しい機能をどうやってAzure AD B2Cで使うかを説明したいと思います。もちろん、この機能をIdentity Experience Framework(カスタムポリシー)を使って構成することもできますが、今回はビルトインポリシーのOpenID Connect IdP連携の機能(Preview)を使って構成します。


最初にどのような動きになるのかビデオに撮ってみました。



前提事項

  • アップル開発者アカウント(最低1年のサブスクリプション契約が必要)
  • Azure Active Directory B2Cのテナント
  • Azure WebApps等のWebホスティングサービス(Metadataのアップロード用)

アップル開発者コンソールでクライアントを構成する

「Sign In with Apple」はOAuth/OpenID Connect的な仕組みを採用しています(完全にプロトコルに準拠している訳ではなさそうですが)。そのため、それらのプロトコルに慣れ親しんでいる方であれば、実装するのはそれほど難しい話ではありません。

アップル管理者コンソールでOAuth/OIDCのクライアントを作成することが出来ます。手順については先に紹介したOktaのブログを参考にしました。とても良いブログだと思います。
https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple

構成するための手順は以下の通りです。
  1. Sign In with Appleを有効にしてApp Idを登録する
  2. Service Idを登録する(これがclient_idとして使われます)
    • ドメインの所有権を確認する
    • redirect_uriを構成する
  3. Sign In with Appleで利用する鍵を登録する
  4. 登録した鍵をダウンロードして署名付きJWTを作る(これがclient_secretとして使われます)

Azure AD B2C上のIdentity Providerを構成する

Azure AD B2CでIdentity Providerを構成する前に、Apple Idに関するディスカバリ・ドキュメント(metadata)を作っておく必要があります。なぜなら、Appleは現在のところmetadata(/.well-known/openid-configuration)を公開していないためです。

私はAzure WebApps上に作成したmetadataを公開しましたが、任意のWebサービスを使うことが可能です。

Azure AD B2CのビルトインのOpenID ConnectのIdPを構成する際、metadataには以下の情報を記載する必要があります。
  • Issuer
  • Authorization Endpoint
  • Token Endpoint
  • Jwks Endpoint
また、metadataを公開するURIは./well-known/openid-configurationで終わっている必要があります。

こちらが作成したmetadataです。

さて、これでAzure AD B2Cのコンソールからビルトインポリシーを構成する準備が整いました。

新しいIdentity Providerを追加する。

OpenID Connect(preview)を選択する


metadata uri、client_id、client_secretを設定する。


sub属性を必須とされている属性へマッピングします。現状、Appleは名前やメールアドレスをid_tokenの中に含めて返してこないのでsub(pairwiseな値)しか使えません。

作成したIdPを利用する様にUser Flow(ポリシー)を構成する

Azure AD B2Cのコンソールでの最後のステップはUser Flowを構成することです。今回はSign In and Sign Up(v2)のポリシーテンプレートでApple IdPを使う様にフローを構成しました。

アプリケーションへ渡すための属性フローを構成します。


これで設定はおしまいです。

Azure AD B2Cに登録したアプリケーションから作成したポリシーを指定してID連携をすればApple Idでのログインが出来るようになっているはずです。


********************

と、言うことでまずはAzure AD B2Cでの構成方法を紹介しましたが、Auth0など他のものへの組込みについても解説できればと思います。(既に他の方も紹介されていますが)

0 件のコメント: