我有一个带有Angular 4前端的Java应用程序,我正在尝试使用OneLogin实现Open ID Connect授权。我在OneLogin中配置了带有重定向URL的应用程序,该URL是一个API端点,用于收集OneLogin生成的代码。步骤1-3如OneLogin文档中所述工作,但是步骤4每次都失败,我无法弄清原因。
步骤1 :用户尝试启动与您的客户端应用程序的会话,并被重定向到OpenID提供程序(OneLogin),并传入该应用程序唯一的客户端ID。 -此方法有效,将用户重定向到OneLogin托管的登录页面。
第2步:OpenID Provider对特定的应用程序实例进行身份验证和授权。 -这有效
第3步:使用预定义的重定向URI将一次性使用的代码传递回Web服务器。 - URI是服务器上的API端点,它确实从OneLogin成功获取了代码
第4步:网络服务器将代码,客户端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"
}
我完全不知道下一步该怎么做。
答案 0 :(得分:0)
根据https://developers.onelogin.com/openid-connect/api/authorization-code-grant,您需要对clientid和secret进行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>"