【问题标题】:Windows Integrated Authentication with Mono使用 Mono 的 Windows 集成身份验证
【发布时间】:2014-01-14 12:09:23
【问题描述】:

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

【问题讨论】:

    标签: c# authentication nginx mono


    【解决方案1】:

    你是对的,这不会像你期望的那样工作,因为 Web.config 的特定配置是由 Windows 上的 IIS 处理的。

    我将描述两种选择。

    1- apache mod_auth_kerb

    您可以将您的应用程序置于使用 mod_auth_kerb 的 apache 代理之后。第一次设置非常复杂。您必须从加入域的 windows 机器生成带有服务帐户的 keytab 文件,然后将其复制到 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 部署到加入域的服务器上。

    【讨论】:

    • 您好@Jose,非常感谢您的回复。这就是我一直在寻找的。我将尝试第一个选项,因为我希望由服务器处理身份验证,当我有时间时,我将尝试您提到的第二个选项(我将研究如何将我的 c# 代码与 Auth0 集成,但如果你有任何指向如何的指针,它将对我有所帮助)。我们主要使用 Nginx,迁移到 Apache 将是一个重大决定。你会推荐 nginx-mod-auth-kerb 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2010-12-08
    • 2019-01-31
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多