認可とは

認可とは、クライアントがリソースオーナーの協力で、認可サーバーに対して一連の動作を実行した後に、クライアントが認可済の状態になるということを指します。現実では主にアクセストークンを持っているか否かでクライアントの認可状況を判断します。

OAuth2 の専門用語と説明

専門用語説明
リソースオーナーセゾン会員、もしくはクライアントのユーザ。
ブラウザーリソースオーナーが使っているウェブブラウザー
クライアントセゾンコネクトを利用するアプリケーションとウェブサービス。
認可サーバーアクセスとリフレッシュトークンの払い出しと認証機能を担うサーバー。
リソースサーバーユーザの情報を保有するサーバー。

認可フロー

📘

認可フローについて、セゾンコネクトが実装しているのが ietf が定義した Authorization Code Grant Flow であるため、以下の説明は ietf の定義に従い作成されております。

詳細はしたの図のように、成功すれば最後にアクセストークンを入手できます。

1545
リソースオーナーがクライアントのウエブサイトにアクセス
クライアントが自分の client_id つけて、ブラウザーを認可サーバーにあるセゾンコネクトのログインページにリダイレクトさせる
リソースオーナーがセゾンコネクトのログインページでIDとパスワードを入力し登録
認可サーバーが Authorization Code を url につけ、ブラウザーをクライアントにリダイレクトさせる
ブラウザーが Authorization Code をつけてクライアントのウェブサイトにアクセス
クライアントが url につけた Authorization Code を自分のclient_secret と加えて、認可サーバーにアクセストークンをリクエスト
認可サーバーがクライアントに access_token と refresh_token を払い出す

アクセスフロー

📘

セゾンコネクトがメッセージ認証コード(MAC)に通じてトークンを認証しているため、以下の説明は ietf の定義に従い、作成されております。

アクセストークンを入手した後、アクセストークンとクライアントシークレットや他に必要情報加えれて特定の header を作成できれば、それでリソースサーバーにアクセスができます。

中でリクエストの中身と説明は以下の図のように(サンプルは会員属性情報照会の場合です)

1302

mac の生成方法について

mac を生成するには timestamp nonce endpoint domain_name で生成した文字列と暗号化キー client_secret が必要になります。

文字列の生成フォーマットは以下のように

[timestamp]\n[nonce]\nPOST\n[endpoint]\n[api_domain]\n443\n\n

// 中の POST と 443 の部分について、セゾンコネクトを利用する場合には固定値になります。

作成した文字列をメッセージにして、キーは client_secret に設定し、HMAC(SHA-256)の方式で暗号化します。その暗号化された値をBase64に変換すれば mac に該当します。

必要情報の説明

アクセス認可に必要な情報についての説明は以下のように

timestampクライアント側の現在日時(1970年1月1日 00:00:00 GMTからの経過秒数)
nonceクライアントが生成した半角英数字十桁の乱数
endpointアクセス先の endpoint。例えば会員属性照会の場合は /auth/account/profile。
portセゾンコネクトがhttpsのみ対応しているため、443に限定。
access_token認可フローを実行して認可済にされると入手できるアクセストークン。
client_secretクライアントがセゾンコネクトに登録したときに、こちらから払い出した文字列。
api_domainアクセス先のドメインネーム。例えば
- api.saisoncard.co.jp (本番環境)
- apit.saisoncard.co.jp (テスト環境)

プログラム実装上の注意事項

認証レベル

アクセストークンの認可状態にはレベル 1 とレベル 2 二種の状態があります。
IDとパスワードで取れた認可はすべてレベル 1 になりますので、レベルアップするには二要素認証が必要です。実際のフローはどうぞ二要素認証の説明ページをご覧ください。

なお、レベル 2 に比べて、レベル 1 はほぼすべての更新系と決済系が利用できないので、どうぞ各 API の説明ページにご確認ください。

クライアント情報管理

上記の client_secret はクライアントを認証できる情報なので、必ず厳重にサーバーで保持するとお願い致します。