Skip to content

Latest commit

 

History

History
188 lines (146 loc) · 9.15 KB

README.ja.md

File metadata and controls

188 lines (146 loc) · 9.15 KB

リソースサーバー実装 (Deno)

概要

これはリソースサーバーの Deno 実装です。 OpenID Connect Core 1.0 で定義されているユーザー情報エンドポイントをサポートし、 また、RFC 6750 (The OAuth 2.0 Authorization Framework: Bearer Token Usage) に定義されている方法でアクセストークンを受け取る保護リソースエンドポイントの例も含んでいます。

この実装は oak フレームワークと authlete-deno-oak ライブラリ を用いて書かれています。

クライアントアプリケーションが提示したアクセストークンの有効性を調べるため、 このリソースサーバーは Authlete サーバーに問い合わせをおこないます。 これはつまり、このリソースサーバーは、アクセストークンを発行した認可サーバーが Authlete をバックエンドサービスとして使用していることを期待していることを意味します。 deno-oak-oauth-server はそのような認可サーバーの実装であり、 OAuth 2.0OpenID Connect をサポートしています。

ライセンス

Apache License, Version 2.0

ソースコード

https://github.com/authlete/deno-oak-resource-server

Authlete について

Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (概説)。 Authlete が提供するデフォルト実装を使うことにより、もしくは Authlete Web API を用いて認可サーバーを自分で実装することにより、OAuth 2.0 と OpenID Connect の機能を簡単に実現できます。

このリソースサーバーの実装を使うには、Authlete から API クレデンシャルズを取得し、 authlete.json に設定する必要があります。API クレデンシャルズを取得する手順はとても簡単です。 単にアカウントを登録するだけで済みます (サインアップ)。 詳細はクイックガイドを参照してください。

実行方法

  1. このリソースサーバーの実装をダウンロードします。

     $ git clone https://github.com/authlete/deno-oak-resource-server.git
     $ cd deno-oak-resource-server
    
  2. 設定ファイルを編集して API クレデンシャルズをセットします。

     $ vi authlete.json
    
  3. http://localhost:1903 でリソースサーバーを起動します。

     $ deno run --allow-net --allow-read --config tsconfig.json src/server.ts
    

エンドポイント

この実装は、下表に示すエンドポイントを公開します。

エンドポイント パス
ユーザー情報エンドポイント /api/userinfo
時刻エンドポイント /api/time

ユーザー情報エンドポイント

ユーザー情報エンドポイントは、OpenID Connect Core 1.05.3. UserInfo Endpoint に記述されている要求事項を実装したものです。

このエンドポイントは、アクセストークンを Bearer Token として受け取ります。 つまり、Authorization: Bearer {アクセストークン} を介して、もしくはリクエストパラメーター access_token={アクセストークン} によりアクセストークンを受け取ります。 詳細は RFC 6750 を参照してください。

このエンドポイントは、クライアントアプリケーションの設定に応じて、ユーザー情報を JSON 形式もしくは JWT 形式で返します。 クライアントアプリケーションのメタデータの userinfo_signed_response_alguserinfo_encrypted_response_alg の両方とも指定されていなければ、ユーザー情報は素の JSON で返されます。 そうでない場合は、シリアライズされた JWT で返されます。 Authlete はクライアントアプリケーションのメタデータを管理するための Web コンソール (デベロッパー・コンソール) を提供しています。 クライアントアプリケーションのメタデータについては、 OpenID Connect Dynamic Client Registration 1.02. Client Metadata を参照してください。

エンドポイントから返されるユーザー情報には、ユーザーのクレームが含まれています。 手短に言うと、クレーム とは、名前やメールアドレスなどの、ユーザーに関する情報です。 Authlete は (OpenID Connect をサポートしているにもかかわらず) ユーザーデータを管理しないので、あなたがクレーム値を提供しなければなりません。 これは、UserInfoRequestHandlerSpi インターフェースを実装することでおこないます。

このリソースサーバーの実装では、UserInfoRequestHandlerSpiImplUserInfoRequestHandlerSpi インターフェースの実装で、ダミーデータベースからクレーム値を取り出しています。 実際のユーザーデータベースを参照するよう、この実装を変更する必要があります。

時刻エンドポイント

このリソースサーバーに実装されているカントリーエンドポイントは、 保護リソースエンドポイントの一例に過ぎません。 主な目的は、保護リソースエンドポイントにおけるアクセストークンの有効性の確認方法を示すことです。

時刻エンドポイントのパスは /api/time です。 このエンドポイントは RFC 6750 で定義されている 3 つの方法を全てサポートするので、次のいずれの方法でもアクセストークンを渡すことができます。

# RFC 6750, 2.1. Authorization Request Header Field
$ curl -v http://localhost:1903/api/time \
       -H 'Authorization: Bearer {access_token}'
# RFC 6750, 2.2. Form-Encoded Body Parameter
$ curl -v http://localhost:1903/api/time \
       -d access_token={access_token}
# RFC 6750, 2.3. URI Query Parameter
$ curl -v http://localhost:1903/api/time\?access_token={access_token}

時刻エンドポイントは、現在時刻 (UTC) に関する情報を JSON で返します。 下記はレスポンスの例です。

{
  "year":        2020,
  "month":       8,
  "day":         12,
  "hour":        15,
  "minute":      9,
  "second":      10,
  "millisecond": 15
}

Web API を OAuth 2.0 のアクセストークンで保護する方法に関する一般的な情報および Authlete 固有の情報については、Authlete Definitive GuideProtected Resource を参照してください。

その他の情報

コンタクト

コンタクトフォーム : https://www.authlete.com/ja/contact/

目的 メールアドレス
一般 [email protected]
営業 [email protected]
広報 [email protected]
技術 [email protected]