gpt4 book ai didi

javascript - 通过 Ajax 请求时完成 OpenIDConnect 身份验证

转载 作者:行者123 更新时间:2023-11-29 10:40:31 26 4
gpt4 key购买 nike

普通 OpenIDConnect 服务器的工作方式如下:

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

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

  • 用户已经在 idServer 上登录
  • 用户已登录 a.com
  • 用户未登录 b.com
  • 我们需要向 Web 服务器 b.com(来自另一个域 a.com)发送 ajax 调用
  • b.com 配置为使用 OpenIDConnect。
  • 但由于对b.com 的请求是通过Ajax 进行的,因此无法正常将用户重定向到idServer。 (我们得到的所有响应都是 302)

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

但是

IdentityServer/OpenIDConnect 中是否有针对这些情况设计的场景?

最佳答案

在这种情况下使用 IdentityServer,您将服务器 b.com 设置为使用不记名 token 身份验证,然后您需要在 Ajax 调用的 header 中使用为 a.com 提供的访问 token

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

JavaScript IdentityServer 客户端示例具有从身份服务器检索 token 的方法,see here

在 Controller 中,您可以像这样获取用户和 token

// 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();

关于javascript - 通过 Ajax 请求时完成 OpenIDConnect 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com