我正在尝试在无服务器 lambda(在 REST 端点中运行)中设置 AWS.config.credentials。登录来自使用 ADFS 作为联合身份的 Cognito 用户池。我还有一个 Cognito 身份池。
我的 lambda 处理程序具有如下所示的事件、上下文和回调参数:
Exports.handler = (事件, 上下文, 回调) {
...
}
event.headers.Authorization 具有一个有效的 JWT(来自 id_token),当在 HTML 客户端上执行对 REST 端点的 POST 调用时,该 JWT 被放置在 Authorization 标头中。我在这里亲自验证了 JWT: https: //jwt.io。此外, context.authorizer 对象看起来也有效,表明我已登录,它具有我的电子邮件和用户名信息以及有效的颁发和到期日期。简而言之,我很确定我已经获得了有效的登录信息。
但是,当我尝试执行以下命令时,出现错误“NotAuthorizedException:无效的登录令牌。颁发者与提供者名称不匹配”
AWS.config.credentials = 新 AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:my-identity-pool-id',
登录:{
“cognito-idp:us-east-1.amazonaws.com/us-east-1_myUserPoolId”:event.headers.Authorization
}
});
AWS.config.credentials.get(err => {
如果(!错误){
var id = AWS.config.credentials.identityId;
console.log('Cognito 身份 ID '+ id);
} 别的 {
console.log('信用错误:', err);
}
});
当然,my-identity-pool-id 和 myUserPoolId 会替换为其实际值。我已经看到有关此主题的许多其他帖子表明错误制定的登录对象会产生此错误,但我已经在这段代码中多次讨论过这个问题 - 并让其他人也帮我检查过。我不认为我把那部分弄错了。就错误文本而言,它实际上是正确的。如果我查看解码后的 JWT,就会发现颁发者和提供者名称是不同的: …
我试图在同一组单元测试中同时使用OCMock和Nocilla.我使用CocoaPods来安装它们,并使用它们引用它们
#import <OCMock/OCMock.h>
#import <Nocilla/Nocilla.h>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以下列方式使用Nocilla的.andReturn时(其中subscriptionData是NSData*):
stubRequest(@"GET", @"https://api.test.com/api/beaconinbox/subscriptions/list").andReturn(200).withBody(subscriptionData);
Run Code Online (Sandbox Code Playgroud)
我得到一个看起来像这样的编译器错误:
/Users/ravi/GitHub/Mobile/ClinicalInbox/ClinicalInboxTests/ClinicalInboxTests.m:63:93:在'LSStubRequestDSL*'类型的对象上找不到属性'_andReturn'
在我#import "<OCMock/OCMock.h>"从代码中删除之前一直存在.然后我的所有测试运行完美.
是否已知与OCMock和Nocilla不兼容?我似乎无法在任何地方找到一个 - 实际上我已经看到了恰恰相反 - 许多人在同一个测试框架中一直使用它们的例子.所以我必须假设我做错了什么,谁能告诉我什么?