使用Mono进行Windows集成身份验证

时间:2014-01-14 12:09:24

标签: c# authentication nginx mono

我正在尝试在Mono上开发一个MVC应用程序,它需要Windows集成身份验证(使用Active Directory)。当LDAP用户尝试访问网站时,不应再次要求输入用户名和密码。这可能吗?当我们在Web.Config中设置“Windows”身份验证而不是“表单”时,我相信IIS负责Windows上的身份验证。当然,这不适用于Mono + Nginx。感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

你是对的,这不会按你期望的方式工作,因为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部署到加入域的服务器。