带有 facebook 身份验证的 Amazon cognito 身份管理

Posted

技术标签:

【中文标题】带有 facebook 身份验证的 Amazon cognito 身份管理【英文标题】:Amazon cognito identity management with facebook authentication 【发布时间】:2014-09-26 04:03:22 【问题描述】:

我在我的 android 应用程序中使用 Amazon Cognito 进行身份管理,该应用程序使用片段进行 Facebook 身份验证。 提供凭据后,在 adb 中使用应用程序时,它不会在 Cognito 中创建任何身份。

我参考了这个教程:- http://mobile.awsblog.com/post/TxR1UCU80YEJJZ/Using-the-Amazon-Cognito-Credentials-Provider

这里是我的 IAM 角色与 cognito 身份池的政策


"Statement": [
    "Action": [
        "cognito-sync:*"
    ],
    "Effect": "Allow",
    "Resource":                                                                                      ["arn:aws:cognito-sync:us-east-1:*****************************:identitypool/*"]
    ]

以及MainActivity.java中的oncreate函数代码

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);
    FragmentManager fm = getSupportFragmentManager();
    fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment);
    fragments[SEARCH] = fm.findFragmentById(R.id.searchFragment);
    fragments[SETTINGS] = fm.findFragmentById(R.id.userSettingsFragment);


    credentialsProvider = new CognitoCredentialsProvider(
            getBaseContext(), // get the context for the current activity        
            "************", // your AWS Account id     
            "us-east-1:**************************", // your identity pool id    
            "arn:aws:iam::************:role/Cognito_******_DefaultRole",// an authenticated role ARN
            "arn:aws:iam::************:role/Cognito_******_DefaultRole" // an unauthenticated role ARN
        );
    client=  new AmazonDynamoDBClient(credentialsProvider);

    FragmentTransaction transaction = fm.beginTransaction();
    for(int i = 0; i < fragments.length; i++) 
        transaction.hide(fragments[i]);
    
    transaction.commit();


我在 MainActivity.java 中的 SessionStateChange 函数是

private void onSessionStateChange(Session session, SessionState state, Exception exception) 
        if (isResumed) 
            FragmentManager manager = getSupportFragmentManager();
            // Get the number of entries in the back stack
            int backStackSize = manager.getBackStackEntryCount();
            // Clear the back stack
            for (int i = 0; i < backStackSize; i++) 
                manager.popBackStack();
            
        if (state.isOpened()) 

                Map<String, String> logins = new HashMap<String, String>();
                logins.put("graph.facebook.com", Session.getActiveSession()
                        .getAccessToken());
                credentialsProvider.withLogins(logins);
                /*login dispatch check*/
                showFragment(SEARCH, false);

         else if (state.isClosed()) 
             showFragment(SPLASH, false);
        

        
    

【问题讨论】:

【参考方案1】:

您如何检查您是否获得了 Cognito id?您提供的 sn-ps 仅配置凭据提供程序,您实际上是如何使用它的?您是否正在针对您的 dynamodb 客户端进行调用?

【讨论】:

以上是关于带有 facebook 身份验证的 Amazon cognito 身份管理的主要内容,如果未能解决你的问题,请参考以下文章

带有 Facebook 身份验证的 Native Sencha Touch 应用程序

如何使用带有 iOS SDK 的 Facebook 身份验证通过 DynamoDB 和 Cognito 存储用户信息

带有 JSON 的 Spring security facebook 身份验证插件不会创建 jsessionid

使用 Facebook 的访问令牌在 UIWebView 中显示带有经过身份验证的用户会话的粉丝页面

无法使用 iOS SDK 和本机 Facebook 应用程序对 Facebook 进行身份验证

无法使用 Flutter 和 Firebase 设置 Facebook 身份验证