...
パネル | ||||||
---|---|---|---|---|---|---|
| ||||||
|
この設定により、/AppLoginProxy下の全リソースは、Shibbolethにより認証されます。
...
パネル | ||||||
---|---|---|---|---|---|---|
| ||||||
<?php require_once "HTTP/Request.php"; /* Shibbolethの認証状態の確認 # このアクションが実行された時点で、Shibbolethのセッションは確立されています。 # 必要に応じてSPの返却したパラメータを参照して権限の確認等を行います。 # SPの返却したパラメータは、HTTP環境変数に追加されています。 */ if(!$_ENVSERVER['eduPersonTargetedIDpersistent-id']){ // eduPersonTargetedID が存在しない場合は認証エラー header("HTTP/1.1 403 Forbidden"); exit; } /* 既存アプリケーションのセッション情報を生成する # この部分の実装は既存アプリケーションの構成に依存します。 # ここでは、'http://application.example.net/login' に諸元をPOSTすると、セッションが生成され # クライアントに返却すべきCookieが得られるものとします。 */ $http =& new HTTP_Request("http://application.example.net/login"); $http->setMethod(HTTP_REQUEST_METHOD_POST); $http->addPostData("user_id", "shibboleth_user"); $http->addPostData("password", "shibboleth_password"); $app_response = $http->sendRequest(); $app_cookies = $http->getResponseCookies(); // 取得されたアプリケーションのセッションCookieをレスポンスに設定する setcookie('session_cookie', $app_cookies["session_cookie"], 0, "/", "application.example.net"); // ログイン後のトップページへリダイレクトする header("HTTP/1.1 302 Found"); header("Location: http://application.eampleexample.net"); ?> |
パネル | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/env ruby # encoding : utf-8 require 'webrick/cgi' require 'net/http' Net::HTTP.version_1_2 class LoginProxy < WEBrick::CGI # GET request def do_GET(request, response) # Shibbolethの認証状態の確認 # このアクションが実行された時点で、Shibbolethのセッションは確立されています。 # 必要に応じてSPの返却したパラメータを参照して権限の確認等を行います。 # SPの返却したパラメータは、HTTP環境変数に追加されています。 unless ENV.key?('eduPersonTargetedIDpersistent-id') # eduPersonTargetedID が存在しない場合は認証エラー response.staus = 403 # 403 Forbidden return end # 既存アプリケーションのセッション情報を生成する # この部分の実装は既存アプリケーションの構成に依存します。 # ここでは、'http://application.example.net/login' に諸元をPOSTすると、セッションが生成され # クライアントに返却すべきCookieが得られるものとします。 http = Net::HTTP.start('application.example.net', 80) app_response = http.post('/login', 'user_id=shibboleth_user&password=shibboleth_password') app_cookies = app_response.get_fields('Set-Cookie').inject({}) do |cookies, cookie_string| key, value = cookie_string[/[^;]*/].split('=') cookies[key] = value end # 取得されたアプリケーションのセッションCookieをレスポンスに設定する session_cookie = WEBrick::Cookie.new('session_cookie', app_cookies['session_cookie']) session_cookie.path = '/' session_cookie.domain = 'application.example.net' response.cookies << session_cookie # ログイン後のトップページへリダイレクトする redirect_url = 'http://application.eampleexample.net' response.set_redirect(WEBrick::HTTPStatus::Found, redirect_url) end alias do_POST do_GET end LoginProxy.new.start |
...
パネル | ||||||
---|---|---|---|---|---|---|
| ||||||
|