proxy

package
v0.0.0-...-66aa4f1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 1, 2016 License: Apache-2.0 Imports: 22 Imported by: 0

README

TA 間連携プロキシ機能

TA 間連携を代行する。

1. 動作仕様

以降の動作記述において、箇条書きに以下の構造を持たせることがある。

  • if
    • then
  • else if
    • then
  • else
1.1. 概要
  1. リクエストを受け取る。
  2. 関連するアカウントが属す全ての IdP について次の 1, 2 を行う。
    1. IdP に、仲介リクエストを送る。
    2. IdP から、仲介コードを受け取る。
  3. 連携先 TA に、全ての仲介コードと共にリクエストを転送する。
  4. 連携先 TA からレスポンスを受け取る。
  5. レスポンスを転送する。
+--------+                    +--------+
|        |----(1) request---->|        |                     +--------+
|        |                    |        |----(2-1) coop.----->|        |
|        |                    |        |          request    |  IdP   |
|        |                    |        |                     |        |
|        |                    |        |<---(2-2) code-------|        |
|        |                    | access |                     +--------+
|        |                    | proxy  |         ...            ...
|        |                    |        |
|        |                    |        |                     +--------+
|        |                    |        |----(3) request----->|        |
|        |                    |        |        +codes       |   TA   |
|        |                    |        |                     |        |
|        |                    |        |<---(4) response-----|        |
|        |<---(5) response----|        |                     +--------+
+--------+                    +--------+
1.2. リクエストの受け取り

以下のヘッダを利用する。

  • X-Access-Proxy-Users
    • 必須。 アカウントタグからアカウント情報へのマップをクレームセットとする algnone な JWT。
  • X-Access-Proxy-To
    • 必須。 転送先 URI。
  • X-Access-Proxy-To-Id
    • 転送先 TA の ID が X-Access-Proxy-To の値からパス以下を除いた部分でない場合は必須。 転送先 TA の ID。

アカウント情報は以下を含む。

  • at_tag
    • 処理の主体なら必須。 そうでなければ無し。 アクセストークンタグ。
  • iss
    • 処理の主体でないアカウントなら必須。 アカウントが属す IdP の ID。
  • sub
    • 処理の主体でないアカウントなら必須。 アカウント ID。

X-Access-Proxy-Users に処理の主体が含まれない、または、複数の処理の主体が含まれる場合、エラーを返す。

1.2.1. リクエスト例
GET / HTTP/1.1
Host: localhost:16050
X-Access-Proxy-To: https://to.example.org/api/writer/profile
X-Access-Proxy-Users: eyJhbGciOiJub25lIn0.eyJyZWFkZXIiOnsiYXRfdGFnIjoiMkV5d2gxWjR0WiJ9
    LCJ3cml0ZXIiOnsiaXNzIjoiaHR0cHM6Ly9pZHAuZXhhbXBsZS5vcmciLCJzdWIiOiIwN0JGRjFE
    MzcwNkQxNjlEIn19.

改行とインデントは表示の都合による。

クレームセットの内容は、

{
    "reader": {
        "at_tag": "2Eywh1Z4tZ"
    },
    "writer": {
        "iss": "https://idp.example.org",
        "sub": "07BFF1D3706D169D"
    }
}
1.3. IdP への仲介リクエスト

TA 間連携プロトコルも参照のこと。

  • X-Access-Proxy-Users に含まれるアカウントが処理の主体のみ、かつ、アカウントタグ、アクセストークンタグ、転送先 TA に紐付く、期限に余裕のあるセッションがある場合、
    • 転送へ。
  • そうでなければ、X-Access-Proxy-Users のアカウントタグで IdP に仲介リクエストを送る。
1.4. IdP からの仲介コード受け取り

TA 間連携プロトコルを参照のこと。

1 つでもエラーであれば、エラーを返す。

1.5. リクエストの転送

TA 間連携プロトコルを参照のこと。

リクエストから X-Access-Proxy-Users, X-Access-Proxy-To, X-Access-Proxy-To-Id ヘッダを削除する。 仲介コードは HTTP ヘッダにて付加する。

1.6. レスポンスの受け取り
  • Cookie に Edo-Cooperation がある場合、
    • アカウントタグ、アクセストークンタグ、転送先 TA に紐付けて保存する。
  • そうでなく、セッションを利用した上での TA 間連携プロトコルのエラーだった場合、
    • セッションを削除する。 IdP への仲介リクエストからやり直す。
1.7. レスポンスの転送

特別な処理は無し。

1.8. エラーレスポンス

エラーは OAuth 2.0 Section 5.2 の形式で返す。 edo-access-proxy にてエラーが発生した場合、レスポンスに以下のヘッダを加える。

ヘッダ名
X-Access-Proxy-Error 適当なメッセージ

Documentation

Overview

TA 間連携代行エンドポイント。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func New

func New(
	stopper *server.Stopper,
	selfId string,
	sigAlg string,
	sigKid string,
	hashAlg string,
	sessLabel string,
	sessDbExpIn time.Duration,
	jtiLen int,
	jtiExpIn time.Duration,
	fileThres int,
	fileMax int,
	keyDb keydb.Db,
	idpDb idpdb.Db,
	tokDb token.Db,
	sessDb session.Db,
	idGen rand.Generator,
	conn *http.Client,
	debug bool,
) http.Handler

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL