将Windows身份验证与OAuth 2.0一起使用

 惜靜吾_919 发布于 2022-12-08 19:58

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

这些服务器都在Intranet环境中,我们历来使用Windows身份验证(Kerberos)来提供单点登录体验.此功能在我的实现中已丢失,因为我使用用户的用户名和密码(针对AD进行身份验证)来授予令牌.我想知道的是,是否有办法获得单点登录体验 - 也许通过使用Windows身份验证来确定用户的身份,然后授予他们一个令牌?

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

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/
        }
    }
    

    2022-12-11 03:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有