提问人:Noah 提问时间:11/8/2023 更新时间:11/8/2023 访问量:9
您能否从与您在 OIDC 中请求授权代码的来源不同的来源完成令牌交换?
Can you complete a token exchange from a different origin than the one you requested an authorization code in OIDC?
问:
我目前正在尝试通过 OIDC 协议(使用 onelogin 进行测试)让我们的桌面应用程序准备好进行 SSO,我们的设置如下:
我们有一个桌面应用程序、一个现有的后端服务器和一个新的 ASP.NET 服务器来处理大部分 SSO 进程。我们希望新的 ASP.NET 服务器能够处理大部分 SSO 进程,基本上是除了打开浏览器到用户的 IdP 登录之外的所有事情。通过 IdP 登录后,重定向 URL 是我们的新服务器,它以以后可以查找的方式存储授权代码。然后,我们的客户端通过调用我们的后端服务器开始登录,然后向我们的新服务器发出请求,告诉它进行令牌交换(为了简洁起见,我不会在这里讨论我们如何将身份验证代码与用户等匹配,因为它似乎有效)。问题就在这里,因为当新服务器尝试令牌交换时,它总是得到invalid_grant响应。我们假设这是因为授权代码请求和令牌交换请求来自两个不同的来源,尽管我们无法确定。是否应该按照我们尝试的方式做到这一点?
我没有包含任何代码片段,因为请求本身似乎很好;当我在我们的测试应用程序中拥有所有(完全相同的)身份验证流代码或新服务器中的所有代码时,它就可以正常工作。问题是这只能起作用,因为我在本地测试,所以 ASP.NET 服务器在我的机器上,它能够在我的机器上弹出一个浏览器,但将来它不会,所以我们只能弹出打开浏览器从客户端应用程序启动进程。任何建议将不胜感激!
我们尝试在新服务器和测试客户端中执行整个授权过程,希望两者都能正常工作,并且它们确实有效;但是,分解它并不能像我们预期的那样起作用,而是我们需要做的。我们还尝试在测试客户端中执行整个授权过程,然后仅将access_token发送到服务器,看看我们是否至少可以命中 userinfo 端点,但它不起作用。我尝试过对请求参数进行三重检查,但它们绝对匹配且有效,因为当两个请求都来自同一来源时,完全相同的代码有效。
答: 暂无答案
评论