OneLogin OIDC 授权请求无效

问题描述 投票:0回答:2

我有一个带有 Angular 4 前端的 Java 应用程序,我正在尝试使用 OneLogin 实现 Open ID Connect 授权。我在 OneLogin 中配置了带有重定向 URL 的应用程序,该 URL 是一个 API 端点,用于收集 OneLogin 生成的代码。步骤 1 - 3 按照 OneLogin 文档中的描述工作,但步骤 4 每次都失败,我无法弄清楚原因。

第 1 步:用户尝试启动与您的客户端应用程序的会话,并被重定向到 OpenID 提供程序 (OneLogin),并传入该应用程序唯一的客户端 ID。 - 这有效,用户被重定向到由 OneLogin 托管的登录页面。

第 2 步:OpenID 提供者对特定应用程序实例的用户进行身份验证和授权。 - 这行得通

第 3 步:使用预定义的重定向 URI 将一次性代码传回 Web 服务器。 - URI 是服务器上的 API 端点,它确实从 OneLogin 成功获取代码

第 4 步:Web 服务器将代码、客户端 ID 和客户端机密传递给 OpenID 提供者的令牌端点,OpenID 提供者验证代码并返回一个一小时的访问令牌。 - 这对我来说是崩溃的地方。

我得到的唯一回复是“授权请求无效”。我为此步骤构建的 HTTP POST 如下所示:

curl -XPOST "https://openid-connect.onelogin.com/oidc/token"
-H "Content-Type: application/x-www-form-urlencoded"
-d "grant_type=authorization_code
&code=<code returned in step 3>
&redirect_uri=https%3A%2F%2Flocalhost
&client_id=<My OIDC Client ID>
&client_secret=<My OIDC Client Secret>"

每次的回应都是:

{
    "error": "invalid_grant",
    "error_description": "grant request is invalid"
}

我完全不知道接下来要尝试什么。

onelogin openid-connect
2个回答
0
投票

根据https://developers.onelogin.com/openid-connect/api/authorization-code-grant,您需要对 clientid 和密码进行 base64 编码,并将其包含在 auth 标头中。

curl -XPOST "https://<region>.onelogin.com/oidc/token" \
-H "Authorization: Basic <base64 encoded client_id:client_secret>" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code=<authorization code>&redirect_uri=<registered redirect uri>"

0
投票

您的 POST 请求中似乎没有包含

code_verifier
,这可能是问题所在。它应该是用于使用 SHA-256 哈希算法为上一步创建
code_challenge
的字符串。

此外,当我将第一个谷歌结果用于在线 SHA-256 哈希生成器时,我也遇到了同样的错误。当我改为使用这个时,我成功地从服务器获取了令牌

© www.soinside.com 2019 - 2024. All rights reserved.