2012-11-09 8 views
5

フラムフレームワークをバックエンドとしてwebappを開発しており、認証を提供する必要があります。Flask-loginとLDAP

これはローカルドメインで使用する社内アプリケーションであるため、既に存在するドメイン資格情報でユーザーを認証することを選択しました。

私が使用している方法はpywin32からwin32security.LogonUserで、ログインに成功するとハンドルを返します。

フラスコログインの仕組みを理解しようとしましたが、@login_manager.user_loaderコールバックが私を混乱させます。

私はユーザーを再読み込みするために使用できるIDを提供する必要があると言いますが、このマッピングを提供するデータベースも永続的な記憶域もありません。 idを使用するためには何

class User(flask_login.UserMixin): 
    def __init__(self,username): 
     self.username = username 
     self.id = ??? 

、そしてどのようにこのIDが戻って、このインスタンスにマッピングすることができます:

マイUserクラスは次のようになりますか?

+0

コンテキストマネージャを使用するリソースです。 –

答えて

4

Flask-loginは、ユーザーの特定のバックエンドに依存せず、必要もありません。ユーザーオブジェクトを表現し、idを返す必要があります。あなたは、LDAPモジュールとpythonでそれを行うことができます

flask-login: can't understand how it works

10

例えば、この記事を参照してください。

LDAP_SERVER = "yourldapserver" 
LDAP_PORT = 390033 # your port 
import ldap 
def login(email, password): 
    ld = ldap.open(LDAP_SERVER, port=LDAP_PORT) 
    try: 
     ld.simple_bind_s(email, password) 
    except ldap.INVALID_CREDENTIALS: 
     return False 
    return True 
1

self.idは一意である文字列でなければなりません。 それはのいずれかになります(これはUNIXログインのようなものです、ドメイン内で一意)

  • メール(多値(LDAP内で一意)

    • CN
    • のsAMAccountName、そのうちの一つは/ことができなければなりませんユニーク)
    • ...

    だけ賢明いずれかを選択し、そして。私は自分の仕事のためにsAMAcountNameを好む。 ldap_bindの後にLDAPSearchを実行する必要があります。

    認証がない最初のバインド(DNを検索する)は、情報が漏洩するのを防ぐために、適用可能なユーザーが作成する必要があります(ハッキングされた場合)。

    LDAP接続は=>あなたが最後にLDAPをバック使用している場合、あなたはおそらくIDとして、ユーザーのDNを使用する必要があります

    with ldap.open(LDAP_SERVER, port=LDAP_PORT) as ld: 
        # do the search/bind/search here