我正在尝试实现亚马逊提供的示例代码以连接到DynamoDb.第一步是客户端的初始化,亚马逊说要在常量类中定义凭证并使用它们:
private void initClients() {
CognitoCachingCredentialsProvider credentials = new CognitoCachingCredentialsProvider(
context,
Constants.ACCOUNT_ID,
Constants.IDENTITY_POOL_ID,
Constants.UNAUTH_ROLE_ARN,
null,
Regions.US_EAST_1);
Run Code Online (Sandbox Code Playgroud)
当我执行代码时,我得到以下内容:D/CognitoCachingCredentialsProvider:从SharedPreferences D/CognitoCachingCredentialsProvider加载凭据:在SharedPreferences中找不到有效凭据
然后,我创建了一个SharedPreferences文件并将凭据放入其中,但仍然遇到相同的错误.在这种情况下,有谁知道CognitoCachingCredentialsProvider在寻找什么以及在哪里?
我知道我们可以通过向AWSCognitoCredentialProvider提供"登录"来将未经身份验证的用户更改为经过身份验证.我已经实现了FB登录,效果很好.
现在问题是,如果用户想要在没有FB凭证的情况下再次登录该怎么办?就像他之前将FB帐户链接到应用程序之前的方式一样.因此,我需要清除与其FB凭证关联的凭据提供程序,并将其返回给未经身份验证的角色.
我试过的是使用清除缓存凭证方法,但是一旦我初始化没有登录的新凭据提供程序,就会发生错误.错误是关于刷新失败,openIDGet失败.
有人可以帮忙解决这个问题吗?
谢谢!
在完全遵循Android上的Amazon DynamoDB"入门"指南后,我最终得到了所有正确创建的表,角色策略等以及该代码:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"eu-west-1:01234567-abcd-8901-efab-234567890123", // Identity Pool ID
Regions.EU_WEST_1 // Region
);
AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider);
final DynamoDBMapper mapper = new DynamoDBMapper(ddbClient);
final Book book = new Book("My new book"); // Simplified version of Book
new Thread(new Runnable() {
@Override
public void run() {
mapper.save(book);
Log.v("Sync", "Book saved!");
}
}).start();
Run Code Online (Sandbox Code Playgroud)
重要提示,与教程最大的(但无法察觉的)差异是我在欧洲,所以我的地区是eu-west-1(爱尔兰).
然而,如果正确地遵循了一切,我会收到以下错误:
com.amazonaws.AmazonServiceException: User: arn:aws:sts::012345678901:assumed-role/Cognito_BookUnauth_Role/CognitoIdentityCredentials is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:us-east-1:012345678901:table/Books (Service: AmazonDynamoDBv2; Status Code: 400; Error …Run Code Online (Sandbox Code Playgroud) android amazon-web-services amazon-dynamodb amazon-cognito aws-sdk
我尝试使用AWS API Gateway,Lambda和Cognito设置测试API,以确保访问安全。由于我是AWS领域的新手,因此我不确定如何使用例如 我首先必须通过Cognito和客户端登录的客户端上的请求库创建到AWS服务的“已登录”发布请求。AWS Api,然后使用我得到的信息来创建一个已签名的请求,如下所示:http : //docs.aws.amazon.com/general/latest/gr/sigv4_signing.html?
如果我走错了路,请告诉我并指出正确的方向:)
amazon-web-services amazon-iam amazon-cognito aws-api-gateway
我正在尝试在Android中使用Amazon Cognito登录。凭据-用户名和密码有效,但出现以下错误
com.amazonaws.mobileconnectors.cognitoidentityprovider.exceptions.CognitoInternalErrorException:SRP错误
原因= java.lang.ArrayIndexOutOfBoundsException:长度= 1; 索引= 1
Amazon Cognito用户注册(注册)和验证很酷!但由于上述错误,我无法通过登录流程。
任何对此的帮助将是巨大的拯救:) TIA!
我已经使用Cognito SDK完成了许多get/set属性工作客户端,但现在我需要能够通过Lambda函数(在step函数中)从后端修改用户的自定义属性.
但是在该过程的客户端版本中,我需要检索当前Cognito用户,因为他们之前已经过身份验证.这是代码:
var poolData = this.poolData;
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null) {
cognitoUser.getSession(function(err, session) {
var attributeList = [];
var attribute = {
Name : attr,
Value : value
};
var attribute = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(attribute);
attributeList.push(attribute);
console.log("attributeList", attributeList);
cognitoUser.updateAttributes(attributeList, function(err, result) {
callback(err, result);
});
});
}
Run Code Online (Sandbox Code Playgroud)
但在后端版本中,我在技术上管理用户.
那么,我如何从lambda函数修改用户的属性数据?用户不一定先登录的地方?
我的服务器是否可以在没有用户名和密码的情况下获取用户的凭据,以便将其发送回客户端?
我有另一种身份验证方法,我认为这样做比将令牌存储在过期的数据库中要容易得多。
现在,我正在使用AWS AppSync和Cognito。我编写了AppSync的架构。但是我无法在“查询”选项卡中测试架构。正在运行的查询需要用户身份验证,而我找不到用户池客户端ID。在哪里可以找到它?
我正在尝试Amazon Cognito Vuex Module在我的Vue.js应用中使用,并axios使用以下代码使所有请求自动通过凭据:
// Add authentication token to each request
axios.interceptors.request.use(async config => {
const response = await store.dispatch('getUserSession');
if (response && response.accessToken && response.accessToken.jwtToken) {
config.headers.AccessToken = response.accessToken.jwtToken;
}
return config;
});
Run Code Online (Sandbox Code Playgroud)
据我所知,这是可能应该对所有组件执行的通用代码,但尚不清楚在何处添加它。大概到App.vue还是到index.js?在App.vue我有:
import Vue from 'vue';
import VueRouter from 'vue-router';
import Vuetify from 'vuetify';
Vue.use(Vuetify);
Vue.use(VueRouter);
export default new Vue({}).$mount('#app');
Run Code Online (Sandbox Code Playgroud)
在index.js:
export default new Vuex.Store({
state: {
...
Run Code Online (Sandbox Code Playgroud) 之前,当我们仅使用Cognito用户池启动项目时,我创建了很多解析器,并通过Cognito用户池数据进行了验证,例如:
#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
$utils.unauthorized()
#end
Run Code Online (Sandbox Code Playgroud)
但是后来我们需要其他授权提供者(Facebook,Google等)。因此,我们迁移到了cognitoIdentityId,但是在AppSync解析器中从Cognito用户池中获取用户数据时出现了问题。在AWS Lambda中,我通过cognitoIdentityAuthProvider 找到了 Cognito用户池ID,并且可以获取Cognito用户属性,如UserAttributes下面的代码所示:
...
...
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({
apiVersion: '2016-04-18',
});
const getCognitoUserPoolId = (authProvider) => {
const parts = authProvider.split(':');
return parts[parts.length - 1].slice(0, -1);
};
// cognitoIdentityAuthProvider, which we pass as an parameter($ctx.identity.cognitoIdentityAuthProvider) from the AppSync resolver
const SUB = getCognitoUserPoolId(cognitoIdentityAuthProvider);
const params = {
UserPoolId: COGNITO_USER_POOL_ID,
Username: SUB,
};
try {
const { UserAttributes } = await …Run Code Online (Sandbox Code Playgroud) amazon-cognito ×10
android ×3
aws-appsync ×2
aws-sdk ×2
amazon-iam ×1
axios ×1
javascript ×1
vue.js ×1
vuejs2 ×1