Ant*_*nko 12 amazon-web-services amazon-cognito
我在使用 Amazon Cognito 中的授权代码流时遇到困难。我正在尝试构建的工作流程如下:
我创建了一个没有客户端机密的客户端。我使用 Cognito UI 进行身份验证,取回代码,然后使用 Postman 发送以下内容:
URL: https://MY-DOMAIN/oauth2/token
Method: POST
Headers:
Content-Type: application/x-www-form-urlencoded
Body:
grant_type=authorization_code&
client_id=<my-client-id>&
code=<code-from-cognito-ui>&
redirect_uri=<my-redirect-url>
Run Code Online (Sandbox Code Playgroud)
我不使用授权,因为没有客户端机密。
作为回报,我收到:
Code: 400
Body: { "error": "invalid_client" }
Run Code Online (Sandbox Code Playgroud)
应用程序客户端被允许在 AWS Cognito 控制台中授予授权代码。
Yas*_*gar 16
不过,文档中似乎没有提到这一点,如果您使用 client_secret 创建了客户端应用程序,则应将 client_secret 添加到参数中以使其工作。
curl -X POST \
'https://<Cognito User Pool Domain>/oauth2/token?
grant_type=authorization_code&
code=8a24d2df-07b9-41e1-bb5c-c269e87838df&
redirect_uri=http://localhost&
client_secret=xcxxxs2r234XXXXXX&
client_id=55pb79dl8gm0i1ho9hdrXXXXXX' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
或者您需要使用“generate client_secret”= false 创建应用程序。此外,默认情况下,用户池会为您的应用生成客户端密钥。
我会对其他解决方案发表评论,但还没有足够的代表。
为将来遇到此问题的任何人提供一些附加信息:
不仅不需要 Authorization 标头......而且还不允许。
说“不需要”让我相信它是可选的。事实上,如果你将其与请求一起传递,我发现响应通常会如OP所描述的那样:
Code: 400
Body: { "error": "invalid_client" }
Run Code Online (Sandbox Code Playgroud)
小智 5
问题出在 Authorization 标头上。
使用没有客户端机密的客户端时,不需要授权标头。
例子:
curl -X POST \
'https://<Cognito User Pool Domain>/oauth2/token?
grant_type=authorization_code&
code=8a24d2df-07b9-41e1-bb5c-c269e87838df&
redirect_uri=http://localhost&
client_id=55pb79dl8gm0i1ho9hdrXXXXXX&scope=openid+email' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
我在 iOS 上使用 Cognito 时遇到了类似的问题(不是放大),但我发现我需要实际发送nil(为了快速)。
我不确定这是否对您的情况有帮助,但这是我在 Swift 中所拥有的:
@objc func config(_ call: CAPPluginCall) {
let appClientId = "myclientid";
let scopes = Set<String>(["openid", "email"]);
let signInRedirectUri = "com.myappurl://signin";
let signOutRedirectUri = "com.myappurl://signout";
let webDomain = "https://[myappdomain].auth.us-east-2.amazoncognito.com";
// NOTICE my nil here for appClientSecret, if I used "" it would throw the error you are seeing
let config = AWSCognitoAuthConfiguration(appClientId: appClientId, appClientSecret: nil, scopes: scopes, signInRedirectUri: signInRedirectUri, signOutRedirectUri: signOutRedirectUri, webDomain: webDomain);
AWSCognitoAuth.registerCognitoAuth(with: config, forKey: "AWSCognito")
call.resolve()
}
Run Code Online (Sandbox Code Playgroud)
它可能无法准确回答您遇到的情况,但这正是我消除可怕错误的方法invalid_client。
| 归档时间: |
|
| 查看次数: |
8141 次 |
| 最近记录: |