これはリソースサーバーの 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.0 と OpenID Connect をサポートしています。
Apache License, Version 2.0
https://github.com/authlete/deno-oak-resource-server
Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (概説)。 Authlete が提供するデフォルト実装を使うことにより、もしくは Authlete Web API を用いて認可サーバーを自分で実装することにより、OAuth 2.0 と OpenID Connect の機能を簡単に実現できます。
このリソースサーバーの実装を使うには、Authlete から API クレデンシャルズを取得し、
authlete.json
に設定する必要があります。API クレデンシャルズを取得する手順はとても簡単です。
単にアカウントを登録するだけで済みます (サインアップ)。
詳細はクイックガイドを参照してください。
-
このリソースサーバーの実装をダウンロードします。
$ git clone https://github.com/authlete/deno-oak-resource-server.git $ cd deno-oak-resource-server
-
設定ファイルを編集して API クレデンシャルズをセットします。
$ vi authlete.json
-
http://localhost:1903
でリソースサーバーを起動します。$ deno run --allow-net --allow-read --config tsconfig.json src/server.ts
この実装は、下表に示すエンドポイントを公開します。
エンドポイント | パス |
---|---|
ユーザー情報エンドポイント | /api/userinfo |
時刻エンドポイント | /api/time |
ユーザー情報エンドポイントは、OpenID Connect Core 1.0 の 5.3. UserInfo Endpoint に記述されている要求事項を実装したものです。
このエンドポイントは、アクセストークンを Bearer Token として受け取ります。
つまり、Authorization: Bearer {アクセストークン}
を介して、もしくはリクエストパラメーター
access_token={アクセストークン}
によりアクセストークンを受け取ります。
詳細は RFC 6750 を参照してください。
このエンドポイントは、クライアントアプリケーションの設定に応じて、ユーザー情報を
JSON 形式もしくは JWT 形式で返します。 クライアントアプリケーションのメタデータの
userinfo_signed_response_alg
と userinfo_encrypted_response_alg
の両方とも指定されていなければ、ユーザー情報は素の JSON で返されます。
そうでない場合は、シリアライズされた JWT で返されます。 Authlete
はクライアントアプリケーションのメタデータを管理するための Web コンソール
(デベロッパー・コンソール) を提供しています。
クライアントアプリケーションのメタデータについては、
OpenID Connect Dynamic Client Registration 1.0 の
2. Client Metadata を参照してください。
エンドポイントから返されるユーザー情報には、ユーザーのクレームが含まれています。
手短に言うと、クレーム とは、名前やメールアドレスなどの、ユーザーに関する情報です。
Authlete は (OpenID Connect をサポートしているにもかかわらず)
ユーザーデータを管理しないので、あなたがクレーム値を提供しなければなりません。
これは、UserInfoRequestHandlerSpi
インターフェースを実装することでおこないます。
このリソースサーバーの実装では、UserInfoRequestHandlerSpiImpl
が UserInfoRequestHandlerSpi
インターフェースの実装で、ダミーデータベースからクレーム値を取り出しています。
実際のユーザーデータベースを参照するよう、この実装を変更する必要があります。
このリソースサーバーに実装されているカントリーエンドポイントは、 保護リソースエンドポイントの一例に過ぎません。 主な目的は、保護リソースエンドポイントにおけるアクセストークンの有効性の確認方法を示すことです。
時刻エンドポイントのパスは /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 Guide の Protected Resource を参照してください。
- Authlete - Authlete ホームページ
- authlete-deno - Deno 用 Authlete ライブラリ
- deno-oak-oauth-server - 認可サーバーの実装
コンタクトフォーム : https://www.authlete.com/ja/contact/
目的 | メールアドレス |
---|---|
一般 | [email protected] |
営業 | [email protected] |
広報 | [email protected] |
技術 | [email protected] |