freedom-man.com

ブログは俺のセーブポイント

Category: IDMaaS

Azure Active DirectoryでTwitterにシングルサインオンしてみる。

Azure Active Directoryネタです。

今回はAzure Active DirectoryでTwitterにシングルサインオンをしてみます。

通常、Twitterやfacebookなどサービスにシングルサインオンというと

これらのWebサービスをIdP(OP)としてOAuth、OpenID Connectによる認証連携をイメージしますが

Azure Active Directoryの場合は、AzureAD自体がIdPになり

TwitterなどのWebサービスがSPとなるような構成になります。

1. TwitterのギャラリーアプリをAADに追加

まずは対象のDirectoryを選択

aad-sso-select-directory

アプリケーションを選択して、追加をクリック

aad-sso-select-application

今回はギャラリーからアプリを追加

aad-sso-addapp

Twitterのアプリケーションを選択

aad-sso-twitter-gallery

追加するとこんな画面が表示される

aad-sso-twitter-settings

シングルサインオンの構成をクリックしてパスワードシングルサインオンになっていることを確認

aad-sso-settings

2. ユーザの割り当てを実行

Twitterのギャラリーアプリ設定画面から、「ユーザの割り当て」を選択してユーザ一覧にアクセスし

対象のAzureADユーザに対して割り当てを行う。

aad-sso-userlist

割り当てでは「ユーザの代わりにTwitter資格情報を入力する」にチェックを付けて

紐付けるTwitterのユーザ名/パスワードを入力する。

aad-sso-userassignment

これで、AzureAD側の設定は完了です。

3. アクセスパネルからシングルサインオンを行う

https://myapps.microsoft.comにアクセスしてAzureADユーザでログインを行うと

以下のようにシングルサインオン用のパネルが表示されます。

aad-accesspanel

複数のディレクトリに属すAzureADユーザの場合は右上のメニューからディレクトリを選択することが可能。

また、各ブラウザのAzureAD用のプラグインがインストールされていない場合は

パネルをクリックするとプラグインのインストール画面に遷移します。

aad-sso-plugin

AzureADのシングルサインオンの仕様上、プラグインをインストールしないと認証連携が動作しません。

インストール後にTwitterのアクセスパネルをクリックすると

一瞬Twitterのログイン画面が表示されて、AzureADに保持しているクレデンシャルと

プラグインのDOM操作によって自動ログインが行われます。

 

ChromeExtensionだと、以下のスクリプトがAzureADから発行されて

クライアントのChromeExtensionで当スクリプトを実行することで自動ログインを実装しているっぽいです。

HTTP通信やコードから全てを追ったわけではないので推測になりますが

おそらくは、AzureADからクレデンシャル付きの各アプリ固有のJSが送られてきて、

それをSessionStorageに保存して、各プラグインがSessionStorageに格納されたJSを

evalで実行するといった流れだと思われます。

 

ギャラリーアプリはTwitter以外にもfacebookやAWS(コンソール)、Salesforceにも対応しています。

SalesforceはSAMLだけじゃなくて今回の無理矢理(?)自動ログインの方法にも対応しています。

 

印象としてセキュリティポリシー云々でエンタープライズ領域で良いかどうかはわかんないけど

個人的に利用する分には便利だなーって感じです。

ただ、個人的に利用するんだったらLastPassみたいなパスワード管理サービスでも良いような気がしますが…。

おそらくLastPassもAzureADと同じような仕組みで自動ログインしているものと思われます。

Azure Active DirectoryとSalesforceのSSO【ギャラリーアプリ編】

IDMaaSシリーズ第三弾として今回はAzure Active Directory(AAD)をやってみます。

 

AADはざっくり言うと認証連携のIdPのクラウドサービスで

任意のアプリケーションに対してOpenID ConnectやSAML、WS-Federation等の

認証連携プロトコルを使ってシングルサインオンができるようになるサービスです。

また、これらの認証連携プロトコルのRP/SPとして対応していない特定のサービスに対しても

シングルサインオンができるような仕組みを持っています。

既存のActive DirectoryからAADに同期することで既存のActive Directoryを

ユーザーリポジトリとして利用することも可能です。

 

ということで、今回はAADを使ってSalesforceとのシングルサインオンをやってみます!

 

Azure Active Directoryに関する説明は以下のサイトが詳しいです↓

Windows Azure Active Directoryことはじめ (1/8):CodeZine

Azure ADとIdentity管理

クラウド時代のActive Directoryの使い方 – IT、IT製品の情報なら【キーマンズネット】

Tutorial: Azure AD Integration with Salesforce – TechNet Articles – United States (English) – TechNet Wiki 

1. Microsoft Azureポータルで対象のAADを選択

まずはアカウントにログインしてポータルトップへアクセスし

Active Directory>既定のディレクトリを選択します。

azure-main

 

ドメイン変更等の理由で規定のディレクトリを利用しない場合は

下メニューの”新規”からAzure Active Directoryを新規に追加します。

Auth0だとドメイン名の32文字の文字数制限があったりするので

外部アプリの制限に引っかかった等の場合は新しくAADを作成してください。

aad-new

2. 作成したディレクトリにユーザを追加

Azure Active Directory用のユーザを作成します。

このユーザに対してログインすることで他のサービスにシングルサインオンすることができます。

Microsoftアカウント(設定時にログインしているユーザ)でもシングルサインオンが可能です。

まずは、ユーザタブで”ユーザの追加”をクリック。

aad-userlist

作成するユーザ情報を入力。

aad-create-user

一時パスワードを発行します。(初回ログイン時にパスワードを設定するフロー)

aad-sf_temporary-passwd1

aad-sf-temporary-passwd2

3. SalesforceアプリをAAD上に作成

アプリケーションから新規のアプリケーションを追加

aad-application

ダイアログで”ギャラリーからアプリケーションを追加します”を選択

aad-application-garary

ギャラリー選択画面が出てくるのでSalesforceを選択

aad-gararyapp-list-sf

アプリケーションが作成され、クイックスタートメニューが表示されます

aad-sfapp-config

4. アプリケーションの設定(シングルサインオンの構成)

”シングルサインオンの構成”から”Windows Azure ADのシングルサインオン”を選択

aad-sfapp-type

アプリケーションURLの構成ではSP(Salesforce)側のEntityIDを設定。

重複がなければhttps://{マイドメイン}やhttps://saml.salesforce.com等でOK。

aad-sfapp-entityid

次に証明書のダウンロードを行い、発行者のURL、リモートログインURL、リモートログアウトURLをコピー。

下記のチェックボックスにチェックを付けて終了

aad-sf-settings

5. Salesforceでシングルサインオン設定を作成

以下のようにシングルサインオン設定を新規に作成する。

aad-sf-ssosetting

発行者、ID プロバイダのログイン URL、ID プロバイダのログアウト URLにはAADで発行した値を入力し

IDプロバイダの証明書にはダウンロードした証明書をセット。

エンティティIDは4で設定した値を入力。

 

ちなみにAADからのSAMLアサーションは以下のようになっており

MicrosoftアカウントなどのユーザはNameIdentifierにユーザ名が入ってこなかったりしたので

AAD以外のユーザに対してシングルサインオンさせたい場合には

メールアドレス属性値等のNameID以外の属性をマッピングするのが良さそうです。

 

設定のマイドメインから認証サービスを追加するのもお忘れなく!

 

この設定でシングルサインオン自体は可能ですが

AADのユーザ情報とSFDCのユーザ情報を同期させたい場合は以下の設定で対応可能です。

6. アプリケーションの設定(自動ユーザプロビジョニング)

AADのSalesforceアプリのクイックスタートから”ユーザプロビジョニングの構成”を行います。

同期処理はAPIを使ってバッチ処理で行われるので

同期用のユーザID・パスワード及びセキュリティトークンを設定します。

セキュリティトークンも必須らしいのでSFDCで発行しないといけないっぽいです。

aad-sf-provisioning-user

これでAADからSFDCへユーザ情報の同期処理が行われます。

7. アプリケーションの設定(ユーザの割り当て)

同期にはプロファイル情報が必要なので、割り当てるユーザのプロファイルを設定していきます。

まずはアプリのユーザ一覧から割り当てをクリック

aad-sf-usermanagement

ダイアログが出てくるので、任意のSalesforceプロファイルを割り当てると

SFDCへの同期対象として処理されます。

aad-sf-userrole

ダイアログでは最初はSFDCのデフォルト?のプロファイル一覧が表示されますが

同期が取られると実SFDC環境に存在するプロファイルが選択できるようになります。

また、最初の同期は10分くらい要するみたいらしいです。

 

あと、6でユーザプロビジョニングの設定をしてしまうと、設定の無効化ができなくなります。

シングルサインオン設定ガチャガチャいじってたら無効化できたりしたんですが

再現性が全くないのでプロビジョニングを無効化するときはアプリごと再作成するのが良さそう。

所感的なこと

AAD使った感想(って言っても一週間くらいしか触ってない)ですが

簡単にSAMLのIdPあるいはOIDCのOPをホスティングできちゃうのは良いなーと思いました。

 

また、無料のプランでもMFAは使えないものの、ディレクトリオブジェクトの制限が500,000個

かなりの数のユーザが作成できることになります。

プランと料金に関しては本家の価格表を参照ください。

 

まだ属性のマッピングとか細かい制御ができないっぽいのがアレですが、今後の機能拡張に期待大!

Auth0でSocialSignOnやってみる。

Auth0とは認証基盤のクラウドサービスであるIDMaaSのサービスです(多分)

 

Auth0自体がRDBMSやLDAP、AD、SocialSignOn(OAuthやらOpenID Connect)やSAMLの

認証基盤のハブとなることで、利用アプリ側はプロトコル間の差異を気にすることなく

同一の方法で複数サービス、多様なプロトコルの認証基盤を利用することができます。

 

また、外部サービスをIdPとする以外にもAuth0自体にユーザリポジトリを持つことができたり

自分がホスティングしているDBサーバを認証基盤として利用することができます。

サーバサイドのソフトウェアインストールが必要になりますが、LDAP、ActiveDirectoryも利用可能です。

それ以外にもIPアドレスで認証できたりMicrosoftのIDMaaSであるWindows Azure Active Directoryを利用して

認証連携をすることも可能です。

また、ベータ版ですがMFAにも対応してるっぽいです。

 

ということで、今回はAuth0でSocialSignOnをやってみます。

 

参考サイトはこちら↓

Auth0で簡単ソーシャルログイン – フレクトのHeroku Lab 

Herokuサンプル – ソーシャルログイン サンプル

 

1. アカウント登録

https://auth0.com/ にアクセスして、アカウントを登録します。

github、Microsoft、Google+のアカウントでSignUpもできます。(こういうのなんて言うんだろ?SocialSignUp?)

auth0-index

 

2. アプリを作成

Apps/APIsで新しいアプリを作成します。

auth0-newapp

※後述のサンプルコードにClientIDやClientSecretが丸ごと記載されているので、ここでメモらなくてもOK。

 

3. SocialSignOnの設定

Connection>Social からSocialSignOn対象のサービスを選択して設定を行います。

Auth0では各Webサービスに対する設定方法が非常にわかりやすくなっているので

対象のWebサービスを使ったこと無い人でも比較的簡単に設定できるのがGoodなところです!

以下はTwitterの設定画面で”How to obtain a Consumer Key?”のリンク先に設定方法が記載されています。

auth0-twitter

 

ここでは具体的な設定方法は割愛しますが、基本的にどのサービスでも

Webサービス側のアプリケーションに対してコールバックURLを設定して

Auth0でWebサービスのClientIDとClientSecretを設定する、という流れになります。

 

4. 認証基盤を利用するアプリケーションを設置する

SocialSignOnの設定が終わったら、あとはコードを書くだけ。

Auth0は各言語、各JSフレームワークでのサンプルが豊富で基本的にコピペして使い回せます。

2で作成したアプリケーションのQuickStartリンクを押下すると以下の画面に遷移します。

auth0-createapp

ApplicationTypeとPlatformをそれぞれ選択すると超親切なサンプルコードが表示されるので

それに従って認証処理の実装を行います。

 

例えば、PlatformにRegular Web Appを選択した場合は以下のようなスクリプトが含まれるコードを

ログイン画面のソースに書くと、auth0のログインウィジェットが配置されます。

あとは、ログインウィジェットを使ってログイン

→ログイン後のコールバック先エンドポイントでURLパラメータからcodeを取得

→codeを使ってAuth0からaccess_tokenを取得

→access_tokenを使ってUserInfoをリクエストというOAuth2.0の実装になります。

 

Single Page AppだとJavaScriptのコールバック関数でユーザ情報を含むJWTが返されるので

このトークンをAuthorizationヘッダに入れてバックエンドアプリのAPIを叩き

アプリ内でJWTの検証及び認証を行うというような実装になります。

 

で、ログインウィジェットを使うとログイン画面こんな感じになります。

auth0-loginwidget

SocialSignOnのサービスが8つもありますが、設定方法のドキュメントが分かり易いので直ぐに設定できちゃいます。

 

ユーザ作るとこんな感じで一覧表示できます。

auth0-userlist

 

こちらに書かれている通り、各サービスのaccess_tokenとかも保持しちゃってるので閲覧には注意が必要。

 

ちなみに、PlatformのところでSalesforceやAWS等の3rdPartyアプリがありますが

これはAuth0で認証した後にAWSやSalesforceのAPIを叩くようなアプリを作るときに有効です。

SalesforceのCanvasAPIだとSFDCが認証基盤となって

ユーザーコンテキストを持ち回るようなアプリになりますが

Auth0を使うと任意のユーザリポジトリが認証基盤になります。

 

Auth0で認証→Auth0からSFDCにJWT飛ばしてaccess_tokenゲットという

JWTフローでaccess_tokenを取得する仕組みになっており

Auth0内の任意のユーザの属性とSalesforceのユーザ名を紐付けて

対象ユーザのaccess_tokenの取得を行います。

 

という感じで、Janrainみたいに簡単にSocialSingOnの仕組みを作ることが出来て

サンプルコードも充実している為、簡易的なアプリとかプロトタイプ作るときに良さそうだなーと思いました。

無料プランだとSocialUser100ユーザ、Auth0内のリポジトリにも50ユーザ作成できるので

上記用途であれば十分かなーと。

 

© 2017 freedom-man.com

Theme by Anders NorenUp ↑