ユーザ認証・アプリケーション認可

OpenID Connect 1.0 の仕様に準拠します。

リソースエンドポイントURL

Production
https://account.fudemame.jp/api/
Staging
http://account-stg.fudemame.jp/api/

Authorization Code Flow

ネイティブアプリケーションはこちらの認証方法を使用してください。
OpenID Connect Basic Client Implementer’s Guide 1.0

認可フロー

  1. アプリケーションは認可リクエストを『認可エンドポイント』に送信し、認可画面をエンドユーザのブラウザで表示する
  2. エンドユーザはブラウザ上でID/PW認証とアプリケーションの認可を行う
  3. 認証と認可が正常に行われた場合、『認可コード』をアプリケーションに戻す
  4. アプリケーションは『認可コード』を『トークンエンドポイント』に送信し、アクセストークンとIDトークン、リフレッシュトークンを受け取る
  5. アプリケーションは4で受け取ったIDトークンを検証する

Implicit Flow

Webサイト上のJavascriptからの接続の場合こちらの認証方法を使用してください。
OpenID Connect Implicit Client Implementer’s Guide 1.0
例): http://address-stg.fudemame.jp/static/test_oidc.html

認可リクエスト(認可エンドポイント)

Request

GET /api/authorize?response_type=code&client_id=[CLIENT ID]&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
...
パラメータ名 説明
response_type 値は必ず’code’とする。これによりリダイレクトURIに認可コードが返される code
client_id 弊社指定のクライアントID address.fudemame.co.jp
redirect_uri ここで指定したURLに認可コードが返される https://client.example.org/cb

Reference

http://openid-foundation-japan.github.io/openid-connect-basic-1_0.ja.html#AuthenticationRequest

http://openid-foundation-japan.github.io/openid-connect-basic-1_0.ja.html#RequestParameters

アクセストークン取得(トークンエンドポイント)

Request

POST /api/token
...
パラメータ名 説明
code /api/authorizeのredirect urlリダイレクトURIに返される認可コードを指定する
client_id 弊社指定のクライアントID address.fudemame.co.jp
client_secret 弊社指定の秘密鍵
grant_type 値は必ず’authorization_code’とする。これによりアクセストークンが取得できる authorization_code

Response

HTTP/1.1 200 OK
...
{
    "access_token":"SlAV32hkKG",
    "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
    "expires_in": 3600,
    "id_token": "eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso"
}
項目名 説明
val.access_token リソースAPIを使用するために必要なトークン。1時間程度の有効期限を持つ
val.refresh_token アクセストークンの有効期限が切れた場合このトークンを用いてアクセストークンの再発行を行う。この場合エンドユーザによる認可を省略することができる。数カ月程度の有効期限を持つ
val.expires_in アクセストークンが生成されてから期限切れになるまでの秒数
val.id_token ユーザ認証情報を含む改ざん検知用の署名付きトークン。ユーザセッション管理は必ずこのトークンに含まれる認証情報を用いること。1時間程度の有効期限を持つ

Reference

http://openid-foundation-japan.github.io/openid-connect-basic-1_0.ja.html#TokenRequest

http://openid-foundation-japan.github.io/openid-connect-basic-1_0.ja.html#TokenOK

ID Token Validate API

IDトークンの検証(デコード)を行う(補助的なAPI。可能であればこのAPIは使用せず、アプリ側で検証をすること)
Request

GET /api/checktoken?id_token=[IDトークン]
Authorization: Bearer ACCESS_TOKEN
...
パラメータ名 説明
id_token 検証するIDトークンを指定 /api/checktoken?id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJI
callback [任意] JSONP使用する場合コールバック関数名を指定します /api/checktoken?callback=func_name

Response

HTTP/1.1 200 OK
...
{
    "iss": "https://account.fudemame.jp",
    "sub": "AAz5XJcjitOEm7gDMu+SEhIZKAcXCsLdmyYLxciABrLh",
    "aud": "testapp.jp",
    "iat": "2014-06-02T02:47:45.808057Z",
    "exp": "2014-06-02T03:47:45.808057Z"
}
項目名 説明
val.iss IDトークンの発行元
val.sub ユーザID
val.aud IDトークン発行対象のアプリケーションID
val.iat 発行時刻
val.exp 有効期限

プロフィール API

ユーザプロフィールの取得
Permission(Scope): profile

Request

GET /api/profile
      Authorization: Bearer ACCESS_TOKEN
      ...
パラメータ名 説明 例”
callback [任意] JSONP使用する場合コールバック関数名を指定します /api/profile?callback=func_name

Response

HTTP/1.1 200 OK
...
{
    "user_id": "APTf2KXrws6pIblaeDQnlZgJu0sBiH0Vd6XZbjxvmHfb",
    "email": "test@test.com",
    "username": "User Name",
    "companyname": "Company Name"
}
項目名 説明
val.user_id ユーザID
val.email メールアドレス
val.username ユーザ名
val.companyname 会社名

サーバ情報 API

サーバ情報の取得

Request

GET /api/info
Authorization: Bearer ACCESS_TOKEN
...
パラメータ名 説明
callback [任意] JSONP使用する場合コールバック関数名を指定します /api/profile?callback=func_name

Response

HTTP/1.1 200 OK
...
{
    "now": "2014-11-11T04:15:57.998859Z"
}
項目名 説明
val.now サーバの現在時刻