我正在尝试在Mono上开发一个MVC应用程序,该应用程序需要Windows集成身份验证(使用Active Directory)。 LDAP用户尝试访问该网站时,不应再询问用户名和密码。这可能吗?当我们在Web.Config中设置“ Windows”身份验证而不是“ Form”时,我相信IIS会在Windows上进行身份验证。当然,这不适用于Mono + Nginx。任何帮助表示赞赏,谢谢
最佳答案
没错,这将无法按预期的方式运行,因为Web.config的特定配置是由Windows上的IIS处理的。
我将描述两种选择。
1- Apache mod_auth_kerb
您可以将应用程序放在使用mod_auth_kerb的Apache代理后面。第一次安装非常复杂。您必须从加入域的Windows机器使用服务帐户生成密钥表文件,然后将其复制到linux机器。
这是一个示例配置:
ProxyPass / http://localhost:9005/ #your backend
ProxyPassReverse / http://localhost:9005/ #your backend
ProxyPreserveHost On
## Rewrite rules
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1]
## Request header rules
## as per http://httpd.apache.org/docs/2.2/mod/mod_headers.html#requestheader
RequestHeader set X-Forwarded-User %{RU}e
<Location />
AuthName "Kerberos Login"
AuthType Kerberos
Krb5Keytab /path/to your keytab/HTTP.keytab
KrbAuthRealm DOMAIN.LOC
KrbMethodNegotiate on
KrbSaveCredentials off
KrbVerifyKDC off
KrbServiceName HTTP/YOURAPP.AD2008R2.LOC
Require valid-user
</Location>
这将代理到您的应用程序,并且只会在用户名后附加一个附加头
X-Forwarded-User
。然后,如果需要完整的配置文件,则必须使用.Net类查询活动目录。
2-使用身份验证代理
很少有身份验证代理支持这种情况并将您从配置中抽象出来。
免责声明:我为Auth0工作
Auth0的设置是;您的应用程序将Auth0视为OAuth身份提供者,并在Auth0上配置与AD的连接。 AD的设置需要将msi部署到加入域的服务器。
关于c# - Windows Mono集成身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21113233/