freedom-man.com

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

Tag: saml

カスタム接続アプリケーションハンドラ試してみた

Winter ’16でカスタム接続アプリケーションハンドラなるものがリリースされたので、こちらの機能を試してみました。

この機能は接続アプリケーション(OAuth, SAML)の振る舞いを変更することができます。
具体的には以下の振る舞いを変更することができます。

  • 「管理者が承認したユーザは事前承認済み」のポリシーにおけるauthorize処理
  • refresh tokenによるrefresh処理
  • userinfoやSAMLアサーションに利用されるカスタム属性の動的生成

カスタム接続アプリケーションハンドラ自体はAuth.ConnectedAppPluginクラスを継承して実装することになります。
詳細はこちらを参照→ConnectedAppPlugin Class | Force.com Apex Code Developer’s Guide | Salesforce Developers

Continue reading

onelogin/php-samlを触ってみた

SAMLのSPとなるようなアプリケーションが簡単に作れるかどうか、という技術検証で

onelogin/php-samlを触ったので使い方をメモってみましたー。

今回はSalesforceをIdP、phpのアプリをSP(ローカル環境)として

ソースに付随されているサンプルのアプリを動かしてみます。

1.  インストール

php使いの人にはお馴染みのComposerを使ってインストールします。

Windowsの場合はChocolateyだと何故か上手く行かなかったので、

本家からインストーラでインストールした方が良いかもしれないです。

からの composer.jsonに”onelogin/php-saml”: “master-dev” を追加

からの

でvenderディレクトリ配下にインストールされます。

2. 証明書の設定

SP側の証明書を設定します。

certsフォルダに秘密鍵と証明書を作成します。

3. settings.phpの設定

まずdemo1ディレクトリ配下のsettings_example.phpをコピーしてsettings.phpを作成します。

settings.phpの中身は以下の通り。

$spBaseUrlにはphp-samlへのURLをセット。

spのNameIDFormatはlib\Saml2\Constants.php のNAMEID_****の定数値から選択します。

idpのentityIdにはマイドメインの値を設定します。

singleSignOnServiceにはSP Initiated SSO用のリダイレクト先URL

(SAML Requestのエンドポイント)を入力します。

ちなみにphp-samlではSAML RequestはRedirectのみ対応しており

SAML AssertionはPOSTのみの対応となっています。

 

また、debug=trueでエラー時にエラーの理由等の詳細な情報が出力され

strict=trueではIdP、SPのentityId等が正確に合致していないとエラーになります。

逆に、strict=falseだとentityId不一致でもログイン出来てしまうので

特別なことが無ければstrict=trueにすべきです。

 

authnRequestsSignedはデフォルトfalseになっており

falseだとAuthnRequestでSignatureが発行されません。

4. Salesforceの設定

設定>作成>アプリケーション から接続アプリケーションを以下のように作成します。

connectapp_phpsaml

各項目には3のsettings.phpに設定した値を入力し

開始URLとACS URLにはassertionConsumerServiceの値、エンティティIDにはentityIdの値

名前ID形式にはNameIDFormatの値をそれぞれセットします。

要求署名を確認をチェックして2で作成した証明書をアップロードしてください。

 

保存後にManageボタンを押下し、有効なプロファイルを設定します。

connectapp_phpsaml_manage

また、メタデータのダウンロードから出力されるXMLのX509Certificateのテキスト値

(以下のMIIErD********の部分)をコピーします。

またメタデータの値がsettings.phpの値と整合性が取れているかどうかも確認します。

(entityIdとかsingleSignOnServiceとか)

5. settings.phpにIdPの証明書を設定

settings.phpのidpのx509certに4でコピペした証明書のテキストをセットします。

6. デモアプリを動かす

IdP Initiated SSOの場合は

Salesforceの接続アプリケーションのIdp-init のログイン URLにアクセスすればOKです。

connectapp_phpsaml_idpsso

アプリケーションランチャーを使ってIdP Initiated SSOをする場合は

接続アプリ>manageの開始URLのところに”Idp-init のログイン URL”の値を入れて

対象アプリケーションのリンクやランチャーをクリックすればOK。

 

SP Initiated SSOの場合は

demo1/index.phpでLoginのリンクをクリックすると

SalesforceにSAML Requestが飛ぶので、Salesforceで認証後に

demo1/index.php?acsにSAML Assertionが返って、認証が出来ます。

 

署名がミスっている場合はSFDCから以下のようなSAMLResponseが

URLパラメータ経由(リダイレクト)で返却されます。

7. デモアプリの中身

デモアプリの根幹であるindex.phpの中身は簡潔で

SP Initiated SSOをする場合はOneLogin_Saml2_Auth#login

SAML AssertionのverifyはOneLogin_Saml2_Auth#processResponse

SLOしたい場合はOneLogin_Saml2_Auth#processSLO

を叩くだけで、SAML Assertionのverifyが通ったタイミングで

php側のセッションを発行すればOKです。

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個

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

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

 

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

SalesforceとOpenAMでSSOやってみる。

最近SSOが熱いのでやってみた。

Salesforce Identityとか出てるけど関係ない!OSS最高!!

Continue reading

© 2017 freedom-man.com

Theme by Anders NorenUp ↑