我有问题通过HTTP头(没有AWS API网关SDK)在AWS上获得认知用户池的API授权。
我的设置:
在AWS上:
iOS客户
什么是工作:
API方法通过serverless正确部署。
我可以通过邮递员呼叫公众(未设置为使用用户池)。
对于私有API方法,我可以看到在API网关管理控制台中设置的Cognito用户池授权器,包括设置为方法的“Identity token source”。要求标题。授权
(默认值),如下所述
在iOS上,我可以作为用户正确注册和登录。我可以将AWS凭证详细信息转储到控制台,显示AccessKey
、SecretKey
和SessionKey
。
在iOS上,我可以通过RestKit查询公共API。
当我试图通过Postman调用私有API方法时,我得到一个HTTP错误401,其正文为{“message”:“Unauthorized”}
。(这是预期的,无需设置任何授权。)
什么失败:
为了测试授权,在《邮递员》中,我尝试了
SessionKey
我从iOS客户端获得的HTTP授权
头-如这里定义的(最后一段-"API网关的Cognito用户池授权程序")X-Amz-Security-Token
头结果总是相同的401错误。
为了授权对私有API的调用,我需要将什么设置为HTTP头?“授权”应该有效-可能我缺少一些角色权限?
如何更好地调试权限/授权流?
如果您使用Swift 3,您可以通过以下代码获得身份令牌。
let pool = AWSCognitoUserPoolsSignInProvider.sharedInstance().getUserPool()
let currentUser = pool.currentUser()
let task = currentUser?.getSession()
let identityToken = task?.result?.idToken?.tokenString
print("identityToken: \(String(describing: identityToken))")
iOS(截至2017年5月11日)
let headerParameters = [
"Content-Type": "application/json",
"Accept": "application/json",
"AccessKey" : awsCredentials.accessKey,
"SecretKey" : awsCredentials.secretKey,
"SessionKey" : awsCredentials.sessionKey,
"Authorization" :
AWSCognitoUserPoolsSignInProvider.sharedInstance().getUserPool().currentUser()?.getSession().result?.idToken?.tokenString
]
在成功登录时,您可以获得aws凭据,并将其存储在您自己的代码中(AuthorizationService?)。我保留了“授权”值这么长时间,这样开发人员就更容易知道这个隐藏对象的完整位置。您应该将其保存在您自己的AuthorizationService类中(或作为AwsCre的扩展成员?)
以下是获取会话的方法:
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:AWSCognitoUserPoolsSignInProviderKey];
AWSCognitoIdentityUser *user = [pool currentUser];
AWSTask<AWSCognitoIdentityUserSession *> *task = [user getSession];
然后,task.result.idToken.tokenString
可以设置为授权头,并且它工作。
谢谢彼得的提示!
我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API
我正在尝试将AWSAPI网关授权器与cognito用户池一起使用。当我使用AWSAPI网关控制台进行测试时,它运行良好。 但当我尝试在api中启用授权时,它会显示请查看下面的屏幕截图 有人能帮忙吗? 仅供参考,我已经按照这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-wi
我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod
问题内容: 我一直在尝试使用axios向National Park Service API发出GET请求,并尝试了几种方法将请求标头中的API密钥设置为无效。任何帮助将不胜感激。 我努力了: 和 都返回401。当我在Postman中发送GET请求时工作,我在密钥字段中输入Authorization,在值字段中输入我的API密钥。 谢谢。 问题答案: 此问题是由浏览器中的CORS OPTIONS请求
我有一个具有两个RESTendpoint的应用程序: 获取/api/产品(不安全) POST/api/产品(安全) 对于第一个endpoint,我不想发送“授权”标头。为此,我配置了以下xml: 对于第二个endpoint,我确实想发送“授权”标头。因此,我配置了这个xml: 令我惊讶的是,GET /api/products需要一个“授权”标头,它返回401。POST /api/products工
我目前正在尝试设置一个对一个具有基本授权的REST API(Cloudsight)的POST请求。到目前为止我的代码是: null null 当我尝试并运行它时,我得到错误:Uncatted SyntaxError:无法对“XMLHttpRequest”执行“set requestHeader”:“authorization:”不是有效的HTTP头字段名。 有人知道代码出了什么问题吗?我对Java