我只是设置一个OneLogin帐户,并希望根据
中的文档从命令行使用curl进行基本测试https://developers.onelogin.com/api-docs/1/getting-started/working-with-api-credentials
和
https://developers.onelogin.com/api-docs/1/oauth20-tokens/generate-tokens-2
尽管curl命令有许多排列,但我还是被“未经授权”。让我从上面第二个链接中的文档中包含的curl命令开始。我这样做:
curl 'https://api.us.onelogin.com/auth/oauth2/v2/token' \
-X POST \
-H "Authorization: client_id:144a1200f765fc67f1e, client_secret:d2dc92524169ee2" \
-H "Content-Type: application/json" \
-d '{
"grant_type":"client_credentials"
}'
(包含伪造的client_id和client_secret,以便您查看他们在我的通话中采取的形式,即空格,编码等)
响应:
{"status":{"error":true,"code":401,"type":"Unauthorized","message":"Authentication Failure"}}
因此,我尝试了所有可以想到的“授权”行。以下是我尝试过的一些示例:
# base64 encode just the client_id and the client_secret (i.e., separately encoded and independent)
Authorization: client_id:zODU1NjYwOTRiZjYwOWFiOWJiZDQ1NGZjNg==, client_secret:WIxY2NjZWJjNWJlZDJlZDdiYmFiMDZiYTkyNzY3M2IxZQ==
# result: unauthorized
# base64 encode "Basic <client_id:client_secret>"
Authorization: Basic NjllZTIxZGRjOWU5YjFjY2NlYmM1YmVkMmVkN2JiYWIwNmJhOTI3NjczYjFl
# result: unauthorized
# use Basic without base64 encoding id and secret
Authorization: Basic 094bf609ab9bbd454fc6:c5bed2ed7bbab06ba927673b1e
# result: unauthorized
最后...这是凭据页面的图像,以证明我确实在正确的位置创建了ID和机密。
答案 0 :(得分:0)
我很尴尬地给出答案的解决方案,除了猜测之外,没有人能正确回答这个问题。
我不小心在工作流程的早期交换了client_id和client_secret,再也没有回过头来检查它们……或者至少如果我再次检查了它们,我会两次犯同样的错误。
我为什么要交换它们,我的最佳猜测是它们在文档和API中以一种顺序出现(client_id,client_secret),在OneLogin UI中以相反的顺序出现(client_secret,client_id)。您可以在我的OP中看到它。
正确的curl命令是我在答案中给出的第一个命令。纯文本客户端ID和密码(未进行base64编码)。这里再次供参考:
curl 'https://api.us.onelogin.com/auth/oauth2/v2/token' \
-X POST \
-H "Authorization: client_id:bed2ed7bbab06ba927673b1e, client_secret:385566094bf609ab9bbd454fc6" \
-H "Content-Type: application/json" \
-d '{
"grant_type":"client_credentials"
}'