2012-11-09 170 views
5

我正在開發一個Web應用程序作爲後端燒瓶框架,我需要提供身份驗證。燒瓶登錄和LDAP

由於這是一個內部應用程序,要在我們的本地域上使用,我選擇使用已存在的域憑據對用戶進行身份驗證。

我使用的方法是win32security.LogonUserpywin32,它返回成功登錄的句柄。

我試圖瞭解如何燒瓶登錄工程,但@login_manager.user_loader回調使我感到困惑。

它說我應該提供可以用來重新加載用戶的ID,但是我沒有數據庫或持久存儲,以提供從這種映射,因爲我只在用戶通過認證檢查有趣。

我的User類是這樣的:

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

怎麼使用id,怎麼會這個ID映射回到這個實例?

+0

如果您使用的是LDAP後端,你應該使用用戶的DN作爲ID。 –

回答

10

你可以做到這一點與LDAP模塊蟒蛇:

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應該是一個字符串,它是獨一無二的。 它可以是一個:

  • CN(唯一在LDAP)
  • sAMAccountName賦(在域中是唯一的,它就像一個UNIX登錄)
  • 郵件(多值,其中一人應該/可能是唯一的)
  • ...

只需選擇一個,和明智的。我更喜歡sAMAcountName作爲我自己的作品。 它需要您在ldap_bind之後執行LDAPSearch。

不經認證的第一個綁定(找到DN)應與一個適用的用戶進行,以避免信息泄露(如果你被黑客)。

LDAP連接是資源=>使用上下文管理

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