authentication, authorization, oauth, openid connect and pyramid

18
認認認認認認認認 • 認認 (Authentication) • 認認 (Authorization)

Upload: moriyoshi-koizumi

Post on 11-Apr-2017

626 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

認証と認可の概念• 認証 (Authentication)• 認可 (Authorization)

Page 2: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

認証とは• 認証因子 (authentication factors) からシステムの利用者を識別して、システムにとって利用者が何者であるかを決定すること• 利用者が何者であるかが分かった所で、システムの機能を使えるかどうかは別問題• (→認可 )

認証因子

決定

決定0182

0021

Page 3: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

認可とは• システムの利用者の認証情報から、システムの一部または全部の機能を利用可能かどうか決定すること

0001

0123

システム管理者

一般ユーザー

✔ ✔

Page 4: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証• Webアプリケーションは HTTPを使って

システムの利用者の環境 (ブラウザ ) と通信する• HTTPのペイロードにシステムの利用者を識別するような情報を乗せて通信することで、Webアプリケーションにユーザーを認証させる

Page 5: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証• 認証に用いられる情報– URL–クエリ文字列–リクエストボディ– Authorizationヘッダ–クッキー– IPアドレス– SSLクライアント証明書など

Page 6: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証✔ https://

example.com/secretpage 40

3

GET /secretpage HTTP/1.1

HTTP/1.1 403 Forbidden HTTP/1.1 200 OK

200

自宅の IPアドレス

GET /secretpage HTTP/1.1

職場の IPアドレス

Page 7: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証• チャレンジ -レスポンス認証–閲覧できないリソースへのアクセスを行おうとしたときに、エラーを返すのと同時に利用

者に認証因子の送信を求める (チャレンジ )– 利用者はレスポンスとして認証因子 (ユーザ名、パスワード等 ) をサーバーに送信する–非セッション型の通信では、サーバは以後のアクセスで利用者識別情報として利用可能なトークンをユーザに返す

Page 8: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証

✔ https://example.com/secretpage 40

1

GET /secretpage HTTP/1.1 GET /secretpage HTTP/1.1Authorization: basic …

HTTP/1.1 401 Authorization RequiredWWW-Authenticate: Basic; realm=…

HTTP/1.1 200 OK200

GET /anotherpage HTTP/1.1Authorization: basic …

https://example.com/anotherpage

認証情報の入力 認証情報はブラウザーに記憶される

200 HTTP/1.1 200 OK

Page 9: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Webアプリケーションの認証Loginpage

https://example.com/secretpage 30

2 HTTP/1.1 302 Moved TemporarilyLocation: /login

✔ https://example.com/anotherpage

識別のための情報がクッキーとしてブラウザーに記憶される

200

GET /secretpage HTTP/1.1

https://example.com/login

GET /login HTTP/1.1

認証情報の入力

Loginpage

HTTP/1.1 200 OK

HTTP/1.1 302 Moved TemporarilyLocation: /secretpageSet-Cookie: xxx=yyy; path=/POST /login HTTP/1.1

user=aaa&passwd=bbb

GET /anotherpage HTTP/1.1Cookie: xxx=yyy

HTTP/1.1 200 OK

Page 10: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

OAuth• OAuthはWebアプリケーションや

WebAPIの、サービス間の認可のためのフレームワーク• サービス Aがサービス Bに認可をするためにサービス Aが利用者に認証を求めるような作りになっていることを利用して、認証の外部化機構としても利用できる

Page 11: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

ここ (2-3の間 ) でprovider側の認証が利用者に対して行われたりする。

OAuthのフロー1. ブラウザを providerの認可エンドポイントにリダイレクト 2. 認可エンドポイントにブラウザが GETリクエスト

3. ブラウザを consumerのコールバック URLにリダイレクト4. コールバック URLにブラウザが GETリクエストcode

code

code

5. Consumerが providerのアクセストークン取得 APIに POSTリクエスト

client_id redirect_uri

client_id client_secret

6. Providerが consumerにアクセストークンや補助的な情報を返却access_token

7. Consumerは与えられたアクセストークンを伴って Providerの各種 APIにアクセス

Consumer(認可を受ける側 )

Provider(認可を与える側 )

User agent(ブラウザ )

Page 12: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

OpenID Connect• OpenID 2.0の後継として生まれた規格• OAuth 2.0ベース• アクセストークンと一緒に OpenID認証情報を JWT (JSON Web Token) として

consumerに渡す

Page 13: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

ここ (2-3の間 ) でprovider側の認証が利用者に対して行われたりする。

OpenID Connectのフロー1. ブラウザを providerの認可エンドポイントにリダイレクト

2. 認可エンドポイントにブラウザが GETリクエスト3. ブラウザを consumerのコールバック URLにリダイレクト4. コールバック URLにブラウザが GETリクエスト code

code

code

5. Consumerが providerのアクセストークン取得 APIに POSTリクエスト

client_id redirect_uri

client_id client_secret

6. Providerが consumerにアクセストークンや IDトークンを返却access_token

7. Consumerは与えられたアクセストークンを伴って Providerの各種 APIにアクセス

Consumer(認可を受ける側 )

Provider(認可を与える側 )

User agent(ブラウザ )

id_token

nonce max_age

Page 14: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Pyramidの認証と認可Authentication and Authorization in Pyramid

Page 15: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Pyramidの認証と認可• 認証ポリシー (IAuthenticationPolicy)• 認可ポリシー (IAuthorizationPolicy)• セキュリティプリンシパル (principals)• ACL (access control list)

Page 16: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Pyramidの認可• view_configに指定された permission

を引数に、登録されたIAuthorizationPolicy の permits() メソッドが呼ばれる

• permits()メソッドが Falseを返した場合、 HTTPForbiddenが raiseされる• チャレンジがある場合は、例外ビューの 1つである forbidden viewでこれを拾って、ログイン用のページにリダイレクトする

Page 17: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

Pyramidの認証• IAuthenticationPolicyの

effective_principals()が現在認証されているユーザに対応する principalsを返す。

Page 18: Authentication, Authorization, OAuth, OpenID Connect and Pyramid

ACLAuthorizationPolicy• Contextオブジェクトの持つ __acl__プ

ロパティの内容の各要素 (ACE=Access Control Entry)と、 IAuthenticationPolicy.effective_principals()の返した principalsを順に照合して、最初に合致したものをpermissionとする__acl__ = [

(Allow, Authenticated, 'authenticated'), (Deny, 'group:XXX:YYY', 'excluded'), (Allow, 'membership:XXX', 'member_only'), ]