エキPy lt repoze.whoの紹介

934 views
853 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
934
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

エキ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

×