gpt4 book ai didi

postman - Postman 如何处理 localhost OAuth 2 重定向?

转载 作者:行者123 更新时间:2023-12-03 19:09:14 25 4
gpt4 key购买 nike

当使用 Postman 通过授权代码获取访问 token 时,我需要输入的字段之一是 Callback URL ,也就是在向授权端点发出请求时的重定向 URI 查询参数。我知道这个 URL 需要在 OAuth 提供程序中注册/列入白名单,但我的问题是 postman 如何实际处理/拦截该请求/重定向回基于本地主机的请求?例如,如果我已经在 http://locahost:8090 上运行了一个本地服务器,并且我告诉 postman 使用 http://localhost:8090 进行该回调,那么 postman 最终如何看到该请求/重定向回(到交换访问 token 的身份验证代码)而不是我的本地 Web 服务器处理该请求?

最佳答案

TL;DR: Postman 在处理响应时基本上会忽略回调 URL。
长篇大论
它确实需要它,但仅用于请求。正如您所说,它需要是正确的 - 与 IdP 客户端应用程序配置完全匹配 - 但仅此而已。
postman 只是帮助您获取 token ,它不需要将其提供给消费应用程序,这是重定向 URL 的全部意义 - 客户端应用程序和 OAuth 客户端应用程序已知的静态路径,可确保恶意网站/中介不会通过滥用重定向流来窃取 token 。
由于它不适用于 Internet 上的浏览​​器,因此 Postman 可以忽略重定向。一旦 IdP 用 token 响应,就 Postman 而言,就可以了。它可以将 token 保存在本地 token 存储中并使用它来发出 API 请求。
隐式流
这被设置为从 Okta 端点获取 token :
Setup to get token
当我单击“请求 token ”时, postman 发出如下请求:

GET https://exampleendpoint.okta.com/oauth2/default/v1/authorize?nonce=heythere&response_type=token&state=state&client_id={the_client_id}&scope=profile%20openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fimplicit%2Fcallback
Postman 弹出浏览器以向 /authorize 端点发出此请求,然后 IdP 在该端点创建 token (如果浏览器已有 cookie),或执行各种重定向以验证用户身份,然后创建 token 。
在此流程结束时,Postman 将收到来自 IdP 的 302,其中包含 token (在位置 header 上)。该重定向的目标是 IdP 中配置的重定向 URL:
302 
Location: http://localhost:8080/implicit/callback#access_token=eyJraWQiOiJxOGRmTGczTERCX3BEVmk4YVBrd3JBc3AtMFU1cjB6cXRUMFJveFZRUVVjIiwiYWxnIjoiUlMyNTYifQ.{the_rest_of_the_token}&token_type=Bearer&expires_in=3600&scope=profile+openid&state=state
此时 Postman 从 #access_token 参数中获取 token ,就可以开始了。
Successful Token using implicit flow
身份验证代码流
Auth Code 流程有两种形式:
  • 授权码(经典)
  • 授权码 + PKCE

  • 身份验证代码流被视为比隐式流“更好”,因为它需要在流程中的第二步来获取访问 token 。您点击授权,这会为客户端提供一个代码,然后将代码交换为 token 。这个 token 代码为服务器端组件提供了更多机会来做更多的事情——额外的检查、丰富的 token 和其他各种事情。
    问:为什么有 2 个验证码流程?
    答:问题在于它需要一个服务器端组件,许多 SPA 和/或移动应用程序不想托管该组件。接收代码并获取 token 的端点必须维护凭据 - 客户端 ID 和客户端 secret - 创建 token 时 IdP 需要这些凭据。 PKCE 是一个扩展,它消除了对受信任服务器的要求。它将计算的哈希添加到 IdP 记住的/authorize 调用中,然后在对/token 的后续调用中,客户端提供哈希的源值。服务器执行相同的计算,检查它是否与原始请求中的计算相同,然后对它没有将 token 分发给坏人感到满意。
    带有 PKCE 的验证码
    在重定向方面,这与隐式完全相同。但是对于请求,它需要发出第二个请求来交换 token 的代码。这里的主要区别是
  • 访问 token URL,这是发送代码和获取 token 作为响应的位置。
  • 代码质询和验证器,这是生成和计算哈希值的 PKCE 要求

  • Auth Code + PKCE
    现在的请求如下:
  • 对/authorize
  • 的 GET
    GET https://exampleendpoint.okta.com/oauth2/default/v1/authorize?nonce=heythere&response_type=code&state=state&client_id={client_id}&scope=profile%20openid&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fimplicit%2Fcallback&code_challenge=E7YtiHqJRuALiNL_Oc5MAtk5cesNh_mFkyaOge86KXg&code_challenge_method=S256
    Postman 将弹出浏览器(如果需要,IdP 将通过登录重定向它)
    最终的代码响应也是 302,但是 location header 包含代码而不是 token :
    location: http://localhost:8080/implicit/callback?code=J3RlQqW122Bnnfm6W7uK&state=state
    所以现在客户端需要调用“访问 token URL”字段中定义的端点来获取 token :
    POST https://exampleendpoint.okta.com/oauth2/default/v1/token
    Body:
    grant_type: "authorization_code"
    code: "J3RlQqW122Bnnfm6W7uK"
    redirect_uri: "http://localhost:8080/implicit/callback"
    code_verifier: "Fqu4tQwH6bBh_oLKE2zr0ijArUT1pfm1YwmKpg_MYqc"
    client_id: "{client_id}"
    client_secret: ""
    响应是一个很好的旧 200 不重定向 - 授权调用将客户端发送回最终重定向登录页面,POST 只是一个普通请求,响应中带有 token
    {"token_type":"Bearer","expires_in":3600,"access_token":"eyJraWQiOiJxOGRmTGczTERCX3BEVmk4YVBrd3JBc3AtMFU1cjB6cXRUMFJveFZRUVVjIiwiYWxnIjoiUlMyNTYifQ.*******","scope":"profile openid","id_token":"eyJraWQiOiJxOGRmTGczTERCX3BEVmk4YVBrd3JBc3AtMFU1cjB6cXRUMFJveFZRUVVjIiwiYWxnIjoiUlMyNTYifQ.********"}

    关于postman - Postman 如何处理 localhost OAuth 2 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62760501/

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