Skip to content

Latest commit

 

History

History
222 lines (166 loc) · 10.1 KB

README.ja.md

File metadata and controls

222 lines (166 loc) · 10.1 KB

リソースサーバー実装 (C#)

概要

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

この実装は ASP.NET Core API と、NuGet パッケージ Authlete.Authlete として提供される authlete-csharp ライブラリを用いて書かれています。

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

ライセンス

Apache License, Version 2.0

ソースコード

https://github.com/authlete/csharp-resource-server

Authlete について

AuthleteOAuth 2.0OpenID Connect の実装を提供するクラウドサービスです。 Authlete が提供する Web API を使い、DB-less (データベース無し) の認可サーバーを構築することができます。 「DB-less」とは、認可データ (アクセストークン等)、 認可サーバーの設定、クライアントアプリケーションの設定を保存するデータベースを管理する必要が無い、という意味です。 これらのデータはクラウド上にある Authlete サーバーに保存されます。

Authlete のアーキテクチャーの詳細については、 New Architecture of OAuth 2.0 and OpenID Connect Implementation をお読みください。真のエンジニアであれば、このアーキテクチャーを気に入ってくれるはずです ;-) なお、日本語版は「OAuth 2.0 / OIDC 実装の新アーキテクチャー」です。

The primary advantage of this architecture is in that the backend service can focus on implementing OAuth 2.0 and OpenID Connect without caring about other components such as identity management, user authentication, login session management, API management and fraud detection. And, consequently, it leads to another major advantage which enables the backend service (implementation of OAuth 2.0 and OpenID Connect) to be combined with any solution of other components and thus gives flexibility to frontend server implementations.

このアーキテクチャーの一番の利点は、アイデンティティー管理やユーザー認証、 ログインセッション管理、API 管理、不正検出などの機能について気にすることなく、 バックエンドサービスが OAuth 2.0 と OpenID Connect の実装に集中できることにあります。 この帰結として、バックエンドサービス (OAuth 2.0 と OpenID Connect の実装) をどのような技術部品とも組み合わせることが可能というもう一つの大きな利点が得られ、 フロントエンドサーバーの実装に柔軟性がもたらされます。

実行方法

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

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

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

     $ dotnet run
    

設定ファイル

csharp-resource-serverauthlete.properties を設定ファイルとして参照します。 他のファイルを使用したい場合は、次のようにそのファイルの名前を環境変数 AUTHLETE_CONFIGURATION_FILE で指定してください。

$ export AUTHLETE_CONFIGURATION_FILE=local.authlete.properties

エンドポイント

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

エンドポイント パス
ユーザー情報エンドポイント /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 をサポートしているにもかかわらず) ユーザーデータを管理しないので、あなたがクレーム値を提供しなければなりません。 これは、IUserInfoRequestHandlerSpi インターフェースを実装することでおこないます。

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

時刻エンドポイント

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

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

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

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

{
  "year":        2018,
  "month":       1,
  "day":         8,
  "hour":        9,
  "minute":      46,
  "second":      10,
  "millisecond": 15
}

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

その他の情報

コンタクト

目的 メールアドレス
一般 info@authlete.com
営業 sales@authlete.com
広報 pr@authlete.com
技術 support@authlete.com