idpselect

package
v0.0.0-...-0ba3bd2 Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2015 License: Apache-2.0 Imports: 17 Imported by: 1

README

ID プロバイダ選択機能

ユーザーに ID プロバイダを選択させて、その ID プロバイダにユーザーを受け渡す。

1. 動作仕様

以降、箇条書きに以下の構造を持たせることがある。

  • if
    • then
  • else if
    • then
  • else
1.1. エンドポイント
エンドポイント名 機能
開始 選択処理を開始する
選択 選択した ID プロバイダにリダイレクトさせる
選択 UI 選択 UI を提供する
1.2. セッション

開始、選択エンドポイントではセッションを利用する。

開始、選択エンドポイントへのリクエスト時に、有効なセッションが宣言されなかった場合、セッションを発行する。 開始エンドポイントへのリクエスト時に、セッションの期限に余裕がない場合、設定を引き継いだセッションを発行する。

開始、選択エンドポイントからのレスポンス時に、未通知のセッション ID を通知する。

1.3. 開始エンドポイント

ID プロバイダ選択処理を開始する。

まず、セッションにリクエスト内容を紐付ける。

  • リクエストに prompt パラメータを含み、その値が select_account を含む場合、
    • 選択 UI エンドポイントにリダイレクトさせる。
  • そうでなく、ID プロバイダに紐付くセッションである場合、
    • ID プロバイダにリダイレクトさせる。
  • そうでなければ、選択 UI エンドポイントにリダイレクトさせる。

選択 UI エンドポイントへのリダイレクト時には、チケットを発行する。 チケットをセッションに紐付ける。 チケットをフラグメントとして付加した選択 UI エンドポイントにリダイレクトさせる。

ID プロバイダへのリダイレクト時には、セッションからリクエスト内容とチケットへの紐付けを解く。 リクエスト内容を付加した ID プロバイダのユーザー認証エンドポイントにリダイレクトさせる。

1.3.1. リクエスト例
GET /?response_type=code%20id_token&scope=openid
    &client_id=https%3A%2F%2Fta.example.org
    &redirect_uri=https%3A%2F%2Fta.example.org%2Freturn&state=Ito-lCrO2H
    &nonce=v46QjbP6Qr HTTP/1.1
Host: selector.example.org
Cookie: Idp-Selector=caiQ2D0ab04N0EPdCcG2OnB4SyBnME

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

1.3.2. レスポンス例

選択 UI へのリダイレクト例。

HTTP/1.1 302 Found
Location: /ui/select.html#CgKa4ugl_k

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

1.4. 選択エンドポイント

ID プロバイダが選択された後の処理をする。

  • チケットと紐付くセッションでない場合、
    • エラーを返す。
  • そうでなければ、リクエストから以下のパラメータを取り出す。
パラメータ名 必要性
ticket 必須 チケット
issuer 必須 選択された ID プロバイダの ID
locale 任意 選択された表示言語
  • チケットがセッションに紐付くものと異なる、または、ID プロバイダが正当でない場合、
    • エラーを返す。
  • そうでなければ、ID プロバイダをセッションに紐付ける。 ID プロバイダにリダイレクトさせる。
1.4.1. リクエスト例
POST /select HTTP/1.1
Host: selector.example.org
Cookie: Idp-Selector=caiQ2D0ab04N0EPdCcG2OnB4SyBnME
Content-Type: application/x-www-form-urlencoded

ticket=CgKa4ugl_k&issuer=https%3A%2F%2Fidp.example.org
1.4.2. レスポンス例
HTTP/1.1 302 Found
Location: https://idp.example.org/auth?response_type=code%20id_token
    &scope=openid&client_id=https%3A%2F%2Fta.example.org
    &redirect_uri=https%3A%2F%2Fta.example.org%2Freturn&state=Ito-lCrO2H
    &nonce=v46QjbP6Qr

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

1.5. 選択 UI エンドポイント

本パッケージでは提供しない。 以下は要件。

ID プロバイダ選択用の UI を提供する。 UI の目的は、選択エンドポイントに POST させること。

以下のパラメータを受け付ける。

パラメータ名 必要性
issuers 任意 特に候補になる ID プロバイダの ID の JSON 配列
display 任意 OpenID Connect Core 1.0 Section 3.1.2.1display と同じもの
locales 任意 OpenID Connect Core 1.0 Section 3.1.2.1ui_locales と同じもの

2. エラーレスポンス

エラーは OAuth 2.0 Section 4.1.2.1 の形式で返す。 セッションからリクエスト内容とチケットへの紐付けを解く。

Documentation

Overview

ID プロバイダ選択ページ。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Page

type Page struct {
	// contains filtered or unexported fields
}

func New

func New(
	stopper *server.Stopper,
	pathSelUi string,
	errTmpl *template.Template,
	sessLabel string,
	sessLen int,
	sessExpIn time.Duration,
	sessRefDelay time.Duration,
	sessDbExpIn time.Duration,
	ticLen int,
	ticExpIn time.Duration,
	idpDb idpdb.Db,
	taDb tadb.Db,
	sessDb session.Db,
	idGen rand.Generator,
	cookPath string,
	cookSec bool,
	debug bool,
) *Page

func (*Page) HandleSelect

func (this *Page) HandleSelect(w http.ResponseWriter, r *http.Request)

func (*Page) HandleStart

func (this *Page) HandleStart(w http.ResponseWriter, r *http.Request)

Jump to

Keyboard shortcuts

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