我目前正在从事一个负责用户身份验证的 Rails 项目。我们决定使用第三方身份验证,我尝试按照示例设置进行操作。该示例由 Kevin Thompson 完成,称为example。
根据 LDAP 服务器的文档,我需要做的步骤是:
- 连接到 LDAP 服务器。
- 匿名绑定(无 DN 和密码)。
- 使用用户名搜索 LDAP 条目
- 如果找到,则检索用户名的 DN。
- 使用他们提供的用户 DN 和密码重新绑定。
- 如果此重新绑定成功,则用户已通过身份验证。
我遵循了 Thompson 的例子,只是我没有使用 nifty;使用设计进行用户管理和omniauth-ldap 进行身份验证。但是,它不太有效,我想知道它是否与服务器文档告诉我的操作与omniauth-ldap 实际操作之间的差异有关...
具体来说,我的问题是我总是收到“无效凭据”错误。这是因为我需要做的事情与omniauth-ldap正在做的事情不匹配吗?
建议或建议将不胜感激!
关于我如何设置的更多信息(为了保持匿名,我替换了一些东西)我可以根据要求发布更多代码。
配置/初始化程序/devise.rb:
config.omniauth :ldap,
:host => 'ldap1.its.domain.ext',
:base => 'ou=People, dc=domain, dc=ext',
:port => 389,
:attrs => 'uid',
:method => :plain,
:uid => 'uid'
应用程序/控制器/用户/omniauth_callbacks_controller.rb:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_filter :verify_authenticity_token
def ldap
ldap_return = request.env["omniauth.auth"]["extra"]["raw_info"]
username = ldap_return.uid[0].to_s
if @user = User.find_by_username(username)
sign_in_and_redirect @user
else
@user = User.create(:username => username,)
sign_in_and_redirect @user
end
end
end