この記事は1年以上前に投稿された記事で現在は正しい情報とは限りません。

今回はOpenAMを使ってOpenID ConnectでSSOを実現したいと思います。

この方法だとPolicy Agentと同様にWebアプリの改修が必要になりますが

OpenID Connect準拠なのでセキュリティ等が担保されているのが利点です。

 

以下、参考URLになります。

最新のOpenAMを導入してOpenID Connect ServerとClientを実装する(IdP編)

OSSによるアイデンティティ管理(4):OpenAMのOpenID Connectへの対応 (3/3) – @IT

Chapter 3. Using RESTful Web Services 

Chapter 6. Configuring Policy Agent Profiles

Chapter 12. Managing OAuth 2.0 Authorization

 

SFDCにはOpenID ConnectのRP側の機能もあるので、SFDCとOpenAMをOpenID ConnectでSSOしてみます。

 

1. OpenAM側の設定

基本的に参考URL通りにやっておけばOKで

トップページからOAuth2の設定をクリックして作成

openam-oauth2setting

openam-oauth2-create

で、アクセス制御>対象のレルム>エージェント>OAuth2.0クライアントでエージェントを作成

openam-oauth2-agent

エージェントの名前がClientID、パスワードがClientSecretになります。

openam-oauth2-createagent

作成後に細かい設定ができます。

リダイレクトURI↓

openam-oauth2-redirecturi

スコープ↓

openam-oauth2-scope

デフォルトのスコープ↓

openam-oauth2-defaultscope

 

2. 簡単な動作確認

OpenAMのOAuthサーバの各エンドポイントは以下のURLにアクセスして取得します。

{OpenAMのURL}/.well-known/openid-configuration

 

{OpenAMのURL(ex. http://openam.example.com:8080/openam)}/oauth2/authorize?response_type=code&client_id={設定したエージェント名}&redirect_uri={設定したリダイレクトURI}&scope=profile%20openid

にアクセスしてログインを行うと以下の認可画面が出てきます。

openam-authpage

 

デザインが…とツッコミたい気持ちは抑えてAllowを押します。

そうすると指定したredirect_uriにcodeが返ってくるので

tokenエンドポイントの{OpenAMのURL}/oauth2/access_token に対して

client_id={設定したエージェント名}&code={取得したCode値}&grant_type=authorization_code&client_secret={設定したパスワード}&redirect_uri={設定したリダイレクトURI}

をPOSTします。

 

レスポンスはこんな感じ。

id_tokenはデコードするとこんな感じ。

 

3. Salesforceに対してSSOしてみる。

セキュリティのコントロール>認証プロバイダ から新規の認証プロバイダを作成

sfdc-authprovider

内容はこんな感じ

sfdc-openam-authprovideredit

作成するとURLが色々と設定されるので、コールバックURLをOpenAM側でも設定する

sfdc-openam-authprovidedr

openam-sfdc-redirecturi

 

 

これで設定は完了。

あとは既存ユーザをリンクするURLでOpenAMユーザとSFDCユーザのマッピングを行い

シングルサインオン初期化URLを使うなり、私のドメインから認証サービス追加するなりしてSSOできます。

 

SFDCはSAMLサポートしているのでOpenAM利用するんだったらSAMLの方で良いと思いますが

OpenID Connectの方は証明書の交換が必要ないので楽っちゃ楽です。

ただし、SFDCのOIDCはユーザの一括マッピングが厳しそうなので、そう考えるとSAMLになっちゃうんですが。