通过Ajax请求时完成OpenIDConnect认证



正常的OpenIDConnect服务器工作方式如下:

  • 转到a.com/secure-resource
  • 你得到一个302从服务器返回
  • 您的浏览器处理它并将您发送到身份服务器
  • 你在那里登录
  • 它通过POST把你送回a.com
  • 您登录a.com并在浏览器上获得a.com/secure-resource

然而我有一个场景,我想解决,但我需要你的帮助。

  • 用户已登录idServer
  • 用户登录a.com
  • 用户未登录b.com
  • 我们需要发送一个ajax调用到web服务器b.com(从另一个域a.com)
  • b.com配置为使用OpenIDConnect
  • 但是因为对b.com的请求是通过Ajax的,所以用户不能正常重定向到idServer。(我们得到的回应是302)

我们可以继续通过Ajax处理302(我仍然不确定这是否会工作,安全方面)。

是否有任何场景在IdentityServer/OpenIDConnect是为这些情况设计的?

在这个场景中,您使用IdentityServer设置服务器b.com以使用承载令牌身份验证,然后您需要在Ajax调用的头中使用为a.com提供的访问令牌

$.ajax({
     url: 'http://b.com',
     headers: {
          Authorization: "Bearer " + Your Access Token
         }
     })

JavaScript IdentityServer客户端示例有从身份服务器检索令牌的方法,见这里

在控制器中,你可以像这样获取用户和令牌

// Get the claims values
var token= (User as ClaimsPrincipal).Claims
               .Where(c => c.Type == "access_token")
               .Select(c => c.Value).SingleOrDefault();

在你的应用程序的其他部分你可以使用这个

//Get the current claims principal
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
// Get the claims values
var token = identity.Claims.Where(c => c.Type == "accept_token")
               .Select(c => c.Value).SingleOrDefault();

相关内容

  • 没有找到相关文章

最新更新