Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
repoze.whoエキスパートPython読書会 LT     aodag
repoze.whoとは?Web認証フレームワークWSGIミドルウェアでもAPI呼び出しでも使えるユーザー認証の各フェーズを細かく設定できるpyramidでも使えるよ
認証のフェーズIdentifyChallengeAuthenticate
Identifyリクエストから認証情報を取り出すレスポンスに認証情報を追加するレスポンスから認証情報を削除する
Challenger認証を開始するための情報をレスポンスに追加する
Authenticateユーザー入力などを認証する
Basic認証の場合(1)Identifierがリクエスト の Authorizationヘッダを読み取るなかった場合Challengerが WWW-Authorizationヘッダを追加して、ブラウザにBasic認証を促す
Basic認証の場合(2)Identifierがリクエスト の Authorizationヘッダを読み取る読み取った内容を Authenticate する。成功だったら、アプリケーションが呼び出される。レスポンスを返すときに、 Identifi...
repoze.whoを使う1. WSGIミドルウェアとして使う2. APIとして使う3. 両方を混ぜる
repoze.whoの設定1. iniファイルで指定する2. Pythonコードで指定する
設定例認証情報はAuthTktで保存する認証自体はSQLAlchemyのモデルで行うログイン画面を使う
who.ini 各プラグインの設定[plugin:auth_tkt]use = repoze.who.plugins.auth_tkt:make_pluginsecret = SeCrEt[plugin:sqla]use = repoze.wh...
who.ini 認証を構成する[identifiers]plugins = auth_tkt[authenticators]plugins = sqla[challengers]plugins = redirect
PasteDeploy + WSGIミドルウェア[filter:who]use = egg:repoze.who#configconfig_file = %(here)s/who.ini
ログイン画面でAPIを使うapi = repoze.who.api.get_api(environ)identity = {   login: request.POST[username],   password: request.POST[p...
Pyramidで使うには?pyramid_whoを使うと、repoze.whoの認証結果をpyramidのautenticated_useridから取得できるようになる
Pluginを作るには?IIdentifier, IAuthenticator, IChallenger を実装しましょう。多分、 IAuthenticator を実装することが多い
IAuthenticator を実装する@implementer(IAuthenticator)class MyAuthenticator(object):   def __init__(self, members):     self.mem...
設定ファイルで使えるようにするdef make_plugin(members=None):  assert members is not None, u"設定しろ"  members = members.split()  return MyAu...
使う![plugins:my]use = aodag.who.plugins:make_pluginmembers =    aodag    drillbits    shimizukawa    takanory...[authentica...
いろんなプラグイン標準           追加アドオン● AuthTkt    ● LDAP● Basic認証    ● SQLAlchemy● HTPasswd   ● OpenID● リダイレクト● SQL        etc...
まとめrepoze.whoは認証フレームワーク認証処理の各フェーズを組み合わせて使えるすでに十分なプラグインがある必要な場合はプラグインを簡単に追加できる
まとめ  とっつきにくいけど   いいやつだよ!
LINKS● repoze.who – WSGI Authentication  Middleware
エキPy lt repoze.whoの紹介
Upcoming SlideShare
Loading in …5
×

エキPy lt repoze.whoの紹介

1,184 views

Published on

  • Be the first to comment

エキPy lt repoze.whoの紹介

  1. 1. repoze.whoエキスパートPython読書会 LT aodag
  2. 2. repoze.whoとは?Web認証フレームワークWSGIミドルウェアでもAPI呼び出しでも使えるユーザー認証の各フェーズを細かく設定できるpyramidでも使えるよ
  3. 3. 認証のフェーズIdentifyChallengeAuthenticate
  4. 4. Identifyリクエストから認証情報を取り出すレスポンスに認証情報を追加するレスポンスから認証情報を削除する
  5. 5. Challenger認証を開始するための情報をレスポンスに追加する
  6. 6. Authenticateユーザー入力などを認証する
  7. 7. Basic認証の場合(1)Identifierがリクエスト の Authorizationヘッダを読み取るなかった場合Challengerが WWW-Authorizationヘッダを追加して、ブラウザにBasic認証を促す
  8. 8. Basic認証の場合(2)Identifierがリクエスト の Authorizationヘッダを読み取る読み取った内容を Authenticate する。成功だったら、アプリケーションが呼び出される。レスポンスを返すときに、 Identifierがレスポンスに認証結果を追加する
  9. 9. repoze.whoを使う1. WSGIミドルウェアとして使う2. APIとして使う3. 両方を混ぜる
  10. 10. repoze.whoの設定1. iniファイルで指定する2. Pythonコードで指定する
  11. 11. 設定例認証情報はAuthTktで保存する認証自体はSQLAlchemyのモデルで行うログイン画面を使う
  12. 12. who.ini 各プラグインの設定[plugin:auth_tkt]use = repoze.who.plugins.auth_tkt:make_pluginsecret = SeCrEt[plugin:sqla]use = repoze.who.plugins.sa:make_sa_authenticator[plugin:redirect]use = repoze.who.plugins.redirector:make_pluginlogin_url = /login
  13. 13. who.ini 認証を構成する[identifiers]plugins = auth_tkt[authenticators]plugins = sqla[challengers]plugins = redirect
  14. 14. PasteDeploy + WSGIミドルウェア[filter:who]use = egg:repoze.who#configconfig_file = %(here)s/who.ini
  15. 15. ログイン画面でAPIを使うapi = repoze.who.api.get_api(environ)identity = { login: request.POST[username], password: request.POST[password],}authenticated, headers = api.login(identity)
  16. 16. Pyramidで使うには?pyramid_whoを使うと、repoze.whoの認証結果をpyramidのautenticated_useridから取得できるようになる
  17. 17. Pluginを作るには?IIdentifier, IAuthenticator, IChallenger を実装しましょう。多分、 IAuthenticator を実装することが多い
  18. 18. IAuthenticator を実装する@implementer(IAuthenticator)class MyAuthenticator(object): def __init__(self, members): self.members = members def authenticate(self, environ, identity): member = identity[member] return (member if member in members else None)
  19. 19. 設定ファイルで使えるようにするdef make_plugin(members=None): assert members is not None, u"設定しろ" members = members.split() return MyAuthenticator(members)
  20. 20. 使う![plugins:my]use = aodag.who.plugins:make_pluginmembers = aodag drillbits shimizukawa takanory...[authenticators]plugins = my
  21. 21. いろんなプラグイン標準 追加アドオン● AuthTkt ● LDAP● Basic認証 ● SQLAlchemy● HTPasswd ● OpenID● リダイレクト● SQL etc...
  22. 22. まとめrepoze.whoは認証フレームワーク認証処理の各フェーズを組み合わせて使えるすでに十分なプラグインがある必要な場合はプラグインを簡単に追加できる
  23. 23. まとめ とっつきにくいけど いいやつだよ!
  24. 24. LINKS● repoze.who – WSGI Authentication Middleware

×