【问题标题】:Authorization code flow - how to get Code parameter value授权码流程-如何获取Code参数值
【发布时间】:2022-11-06 00:52:52
【问题描述】:

我已经实现了一个重定向到 wso2 身份服务器登录页面的应用程序。如果登录成功,用户将被重定向到可以阅读其个人资料详细信息的页面。 根据他的角色,他可以执行某些操作,例如创建新用户。

我已经实现了一个 API (http://localhost:8080/add-user),它调用这个 URL (https://localhost:9443/t/carbon.super/oauth2/token) 来生成所需的访问令牌我需要调用的范围(例如 internal_user_mgt_create) wso2 SCIM2.0 API (https://is.docs.wso2.com/en/latest/apis/scim2-rest-apis/#/Users%20Endpoint/createUser)。

如果我使用 grant_type=password 并使用用户凭据生成访问令牌以调用 wso2 SCIM2.0 API,一切正常,但我想使用“authorization_code”作为 grant_type 以避免在我的应用程序中发送用户凭据。

我怎样才能做到这一点?而且我知道我需要使用这个流程的参数之一是“代码”,我在哪里可以获得它的值?

【问题讨论】:

    标签: java wso2 spring-security-oauth2 wso2-identity-server scim2


    【解决方案1】:

    您可以通过从应用程序中允许的授权类型列表 OAuth/OpenID 连接配置中选择代码来在应用程序中配置授权代码授权。 [1]

    使用授权码授权时,您的应用程序需要 wso2 授权端点以获取授权码使用此授权令牌和客户端密码,您可以获得能够调用 scim 端点的访问权限。

    有关详细信息,请参阅以下文档

    [1]。 https://is.docs.wso2.com/en/latest/guides/access-delegation/authorization-code/ [2]。 https://medium.com/identity-beyond-borders/generating-access-tokens-using-wso2-identity-server-4d8c084a3bf5

    【讨论】:

    • 登录后,我被重定向到用户配置文件视图 (localhost:8080/index),我没有得到指定代码参数的 url(如 localhost:8080/index?code=xxxxxxxxx)。所以我点击了“检查”,在“网络”面板中有这个网址“localhost:8080/login/oauth2/code/wso2?code=9f228764-3e73-329c-96a0-5fe039dd5643&state=...”所以我猜到代码值为“9f228764-3e73-329c-96a0-5fe039dd5643”,但是当我尝试生成访问令牌以调用 SCIM2.0 API 时,我收到此错误:“从令牌请求收到的非活动授权代码”
    • 因为,它会将您重定向到配置文件视图,我猜,已经为代码获取了令牌,如果是这样,这是预期的。您能否检查网络选项卡以查看是否有令牌调用并查看令牌是否已交付。如果有令牌,您可以使用它来调用 scim2 端点(确保您已为令牌获得必要的范围)。
    • @ffff 你有什么样的应用程序?它是用 react/angular 编写的单页应用程序吗?或者它是一个基于java的应用程序?我想推荐使用合适的 SDK github.com/search?q=org%3Aasgardeo+sdk 之一。如果您正在处理授权代码授权,则 authz_code 将返回到在服务提供程序中配置的回调 URL。根据您的评论, localhost:8080/login/oauth2/code/wso2 应该是您的应用程序的回调 URL。一旦收到应用程序的回调响应,应用程序应该发起令牌请求
    • 我的应用程序是基于 java 的(使用 spring 框架)。我在回调 url 中获得了 authz_code,但是当我使用它来生成访问令牌以调用 SCIM2.0 API 时,我收到错误:“从令牌请求收到的非活动授权代码”
    【解决方案2】:

    如果不了解有关应用程序的更多详细信息以及您希望用户使用的流程,就很难为这个问题提供准确的答案。但是,如果您对 OAuth2 代码授权类型有更好的了解,会容易得多。以下是基本流程。

    1. 用户通过 Web 浏览器访问您的应用程序。

    2. 您的应用程序将用户重定向到身份服务器,请求中包含以下参数。

      1. client_id=xxx
      2. response_type=代码
      3. 重定向uri=yyy - 应用程序中要获取授权码的位置。这需要事先向 IS 服务提供商注册。
      4. 范围
      5. IS 提示用户登录。

      6. 然后,IS 使用授权代码将用户重定向到给定的重定向 URI。

      7. 客户端收到代码后,会使用以下参数对 IS 的令牌端点 (https://localhost:9443/t/carbon.super/oauth2/token) 进行反向通道调用。

        1. grant_type=authorization_code
        2. client_id=xxx
        3. client_secret=zzz
        4. 代码=ccc
        5. IS 验证代码并颁发访问令牌。

          阅读有关 OAuth2 的更多信息here

          现在,如果您收到“非活动授权代码”错误,您的应用程序可能已经在调用添加用户 API 之前使用收到的代码调用令牌端点。

          理想情况下,您的添加用户 API 根本不应该调用令牌端点。您应该从应用程序调用令牌端点,获取访问令牌并在需要时将其传递给添加用户 API。或者,您可以直接从应用程序本身调用 SCIM API。

          我希望这有帮助!

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2018-04-13
      • 2020-02-26
      • 2020-12-27
      相关资源
      最近更新 更多