ユーザー様をログインするために、御社サービスから OPTiM Store へ認可リクエストを送信するAPIです。
ユーザー様をログインさせるタイミングで、御社サービスから OPTiM Store の認可エンドポイント (Authorization Endpoint) へユーザー様をリダイレクトさせてください。
Key | Value |
---|---|
client_id | 事前登録時に取得した Client ID |
scope | openid 固定 |
response_type | code 固定 |
redirect_uri | 事前登録した御社サービス側の OpenID Connect Callback URL |
state | 御社サービス側のセッションに紐付いた任意の文字列。redirect_uri への Callback 時にそのままの値が返されるので、CSRF 対策に利用してください。 |
nonce | 御社サービス側のセッションに紐付いた任意の文字列。後述の ID Token にそのままの値が含まれて返されるので、Code 置換攻撃対策に利用してください。 |
prompt | OPTiM Store 側でユーザー様にパスワード入力を強制 (強制ログイン) する場合には login という値を指定してください。それ以外の場合にはこのパラメータは不要です。 |
以下に Ruby での Authorization Request 送信のコンセプトコードを記載します。(実際の利用時には OpenID Connect ライブラリ等の利用を推奨します)
params = {
client_id: '<your-client-id-for-the-tenant>',
scope: 'openid',
response_type: 'code',
redirect_uri: 'https://your-service.example.com/optim-store/callback',
state: '<session-binded-opaque-value>',
nonce: '<session-binded-opaque-value>',
}
authorization_endpoint = 'https://store-xyz-federation.optim.co.jp/connect/authorization'
authorization_endpoint_with_request_params = [authorization_endpoint, params.to_query].join('?')
# https://store-xyz-federation.optim.co.jp/connect/authorization?
# client_id=%3Cyour-client-id-for-the-tenant%3E&
# redirect_uri=https%3A%2F%2Fyour-service.example.com%2Foptim-store%2Fcallback&
# response_type=code&scope=openid&state=xxx&nonce=yyy
redirect_to authorization_endpoint_with_request_params
これにより、ユーザー様は、自身の端末上のブラウザで、OPTiM Store のログインページにアクセスすることになります。
正しく Authorization Request が送信された場合、ユーザー様には OPTiM Store へのログイン画面が表示されます(既にOPTiM Storeヘログインしている場合は、スキップされます)。
ユーザー様のログインが完了しましたら、下記の仕様に基いて御社サービス側の Callback URL
にリダイレクトにてアクセスいたします。
リクエストに問題がない場合は、 御社サービスより Token Request へのアクセスを行い、処理の続きを行ってください。
redirect_uris
として登録してください。https://your-service.example.com/optim-store/callback?code=<onetime-token>&state=<exact-value-you-sent>
Key | Value |
---|---|
code | OpenID Connect における認可コードです。Token Request で利用します。 |
state | Authorization Request で送付されたstate と同じ値です。 |
code
は次のセッションで認証結果を取得する際に必要になります。
なお、state
がリクエスト送信時のブラウザセッションと紐付いていない場合は CSRF 攻撃の可能性があるため、その Callback リクエストはエラーとして受け付けないようにしてください。
code
が付与されていない場合は、ユーザーのログイン失敗等によるエラーレスポンスです。その場合は error
というパラメータが付与されています。
以下にエラー時のリダイレクト URL の例を記載します。
https://your-service.example.com/optim-store/callback?error=access_denied&state=<exact-value-you-sent>