【问题标题】:Use Windows Authentication with OAuth 2.0将 Windows 身份验证与 OAuth 2.0 结合使用
【发布时间】:2014-11-30 19:45:30
【问题描述】:

我已经设置了一个 OWIN 授权服务器和几个公开 ASP.NET Web API 的资源服务器。我正在从特定于每个资源服务器的授权服务器提供 JWT(想法是每个资源服务器都需要将自定义声明包装在其令牌中)。

这些服务器都位于 Intranet 环境中,我们过去一直使用 Windows 身份验证 (Kerberos) 来提供单点登录体验。此功能在我的实现中丢失了,因为我使用用户的用户名和密码(针对 AD 进行身份验证)来授予令牌。我想知道是否有一种方法可以恢复单点登录体验 - 也许通过在授予用户令牌之前使用 Windows 身份验证来建立用户身份?

我觉得这有点不正统,可能很愚蠢 - 所以请告诉我是否有更好的替代方法可以在 Intranet 环境中使用 OAuth 2.0 获取 SSO。

【问题讨论】:

    标签: .net oauth-2.0 single-sign-on windows-authentication owin


    【解决方案1】:

    事实证明,这并不像我预期的那么难。我从另一个端点 (/token/windows/) 创建了一个标准的 Web API 控制器。此端点使用 Windows 用户尝试连接的客户端(资源)ID 接受 HTTP POST。我将标准 [Authorize] 属性放在操作上以确保建立身份,然后我手动创建声明身份并将 JWT 返回给用户。从那时起,用户使用标准令牌刷新过程。

    编辑:下面是一个代表我实现的示例。请注意,此应用在 IIS 中配置为支持 Windows 身份验证(除了匿名身份验证):

    [RoutePrefix("token/windows")]
    public class WindowsAuthenticationController : ApiController
    {
        [Authorize]
        [HttpPost]
        [Route("{client_id}"]
        public async Task<IHttpActionResult> CreateTokenForWindowsIdentity(string client_id)
        {
            var user = User as ClaimsPrincipal;
            if (user == null) return Unauthorized(); //401
            var claims = //generate claims based on the User.Identity.Name...
            var identity = new ClaimsIdentity("JWT");
            identity.AddClaims(claims);
    
            //manually create JWT using whatever method you prefer,
            //I used something inspired from http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/
        }
    }
    

    【讨论】:

    • 您有代码示例或任何链接来说明这是如何完成的吗?
    • Joshua,你的授权服务器和资源服务器是相同的还是不同的?如果您正在做一个基于角色的资源服务器,那么通过包装 [Authorize] 属性将与为使用令牌配置的内容冲突。当您调用“CreateTokenForWindowsIdentity”时,由于此 Authorize 属性,它会期望请求具有有效的令牌。您是如何构建您的资源和身份验证服务器以实现 Windows 身份验证和基于令牌的身份验证的?谢谢
    • 给任何发现此问题/答案的人的说明 - 我认为此设置不是最佳设置,而且有点 hacky。我已经开始使用 OpenID 连接设置,其中我有一个单独的(经过 Windows 身份验证的)服务作为身份提供者。
    • @JoshuaBarron 你能否提供一些关于 Windows 身份验证 + openID 或 oauth 在身份验证服务器中实现的见解
    • @JoshuaBarron 你能分享更多关于你的解决方案的细节吗?
    猜你喜欢
    • 2011-01-16
    • 2011-03-12
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多