首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OAuth 2.0中使用Windows身份验证

在OAuth 2.0中使用Windows身份验证
EN

Stack Overflow用户
提问于 2014-12-01 03:45:31
回答 1查看 15.9K关注 0票数 13

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

这些服务器都位于intranet环境中,在这种环境中,我们过去使用Windows身份验证(Kerberos)来提供单点登录体验。此功能在我的实现中丢失了,因为我使用用户的用户名和密码(根据AD进行身份验证)来授予令牌。我想知道的是,是否有办法重新获得单点登录体验-可能是通过使用Windows身份验证在向用户授予令牌之前确定用户的身份?

我觉得这有点不正统,而且可能很愚蠢--所以请告诉我有没有更好的替代方法来在intranet环境中使用OAuth 2.0实现单点登录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 22:34:25

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

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

代码语言:javascript
运行
复制
[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/
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27217424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档