5.12. OpenID Connect 認証開始

GET /1/(tenantId)/auth/oidc/init

OpenID Connect 認証を開始する。

本APIは、OpenID Connect認証画面への誘導と認証成功後のログインに使用するワンタイムトークンの通知を行う

Query Parameters:
 
  • sessionToken (string) -- セッショントークン
  • redirect (string) -- 認証結果通知先URL(必須)
  • op (string) -- OP種別(必須)
  • scope (string) -- Authentication Request に使用する scope 値
  • createUser (boolean) -- ユーザの自動生成許可フラグ。デフォルト false。
Status Codes:
Response Headers:
 
  • Location -- 認証サーバの認証URI

リクエスト

sessionTokenを省略した場合は、新規ログイン向けのOpenID Connect認証処理を開始する。

既に存在するユーザにOpenID Connect認証されたOPアカウントをリンクする場合は、リンクさせたいユーザでログイン後、 sessionTokenを設定して本APIを実行する。 リンク設定したOPアカウントでのOpenID Connect認証ログインにより、リンク設定したユーザでログインすることができる。 1ユーザに対して複数のOPアカウントをリンク設定できる。

sessionTokenを設定した場合、認証に使用されたOPアカウントが既に自ユーザでリンク設定されている場合は、正常処理となる。 別ユーザでリンク設定されている場合は、リンクエラーを通知する。

opに設定可能な値を以下に示す。

  • google: Google認証
  • adfs: ADFS (Windows Server 2016)
  • other: OpenAMを使用

scopeで認証時に取得するユーザ情報種別の指定が可能。

  • scope値はスペース区切りの文字列を設定する。
  • scope値を設定する場合は、必ず "openid" が含まれなければならない。
  • scope値を省略した場合は、OPで利用可能なユーザ情報を全て取得する。
  • ユーザ情報の取得が不要の場合は、"openid" のみを設定する。

レスポンスの例

成功時(302 Found)のレスポンスヘッダの例を示す。 長いため改行しているが実際は1行である。

Location: https://accounts.google.com/o/oauth2/v2/auth
?client_id=0123456789-abcde.apps.googleusercontent.com
&redirect_uri=http://baas.example.com/api/1//591c215bd6f6880f652109d1/auth/oidc/auth_resp
&response_type=code&scope=openid%20email%20profile

エラー時はエラーページ(HTML)が返却される。

ワンタイムトークンはHTTPリクエストのクエリパラメータとして認証結果通知先URLに通知される。

  • 認証・リンク成功時には、クエリパラメータ「token」にワンタイムトークンが設定される。
  • 認証・リンクエラー時は、クエリパラメータ「error」にエラー理由が設定される。

HTTPリクエストは以下のフォーマットとなる。

  • 認証・リンク成功: {認証結果通知先URI}?token={ワンタイムトークン}
  • 認証・リンクエラー: {認証結果通知先URI}?error={エラー理由}

HTTPリクエスト行の例を以下に示す。

GET http://sample.net?token=t568PrrpvB1W7DhqBhlVfTMAc2NhsIw9j60OTZLz HTTP/1.1

OpenID Connect認証に成功し、認証されたユーザと同名のユーザが存在しない場合、DBにユーザを登録する。 このときcreateUserがfalseの場合は、ユーザを登録せずに認証エラーを通知する。

DBに登録するユーザ情報は、下記の通り。

ユーザ情報 説明
_id ユーザID(DB保存時に自動付加される)
tenantId テナントID
options JSON配列型の"claims"フィールドに、認証時に取得したユーザ情報がJSON文字列で格納される
createdAt DB上のユーザ作成日時
updatedAt DB上のユーザ更新日時
etag ログイン時に自動付加されるETag値
federated 外部認証連携有無(常にtrue)
primaryLinkedUserId リンクユーザID。設定されたリンクユーザIDは、リンク情報削除不可となる。

"username", "email" にはランダムな文字列が設定される。

optionsのclaimsフィールドには、認証時にOPから取得したID TokenとUserInfoを足し合わせたclaimセットがJSON文字列で設定される。 claimsフィールドはJSON配列型であり、リンクされている全てのclaimセットが設定される。 具体的なclaim名は、OpenID Connect Core 1.0を参照。 optionsは、ユーザ登録時だけでなく、OpenID Connect認証成功時に常に更新される。

OpenID Connect認証成功時には DB にリンクユーザの登録・更新を行う。 DBに登録するリンクユーザ情報は、下記の通り。

リンクユーザ情報 説明
id MongoDB保存時に自動付加されるID
userId リンクされたユーザID
iss Issuer
sub Subject
op OP種別

注意事項

  • OpenID Connect認証を使用しているテナントに対してのみ実行可能。
  • "redirect" には、デベロッパーコンソールで登録したURLを設定すること。登録されていない場合は400エラーを返却する。