Cognito kullanıcı havuzu kullanıcı adını cognito kimlik havuzu kimliğinden alma


10

Kimlik Sağlayıcı olarak bu Kullanıcı Havuzuna sahip bir Cognito Kimlik Havuzu ile hesap yönetimi için AWS Congito Kullanıcı Havuzları kullanıyorum. Lambda istek gönderir API ağ geçidi üzerinden bir API erişimi denetlemek için bunu kullanıyorum. Lambda'm, Micronaut kullanılarak Java 8 ile uygulandı. Bütün bunlar iyi çalışıyor.

Lambda, ben adını alıyorum Principaliçinde HttpRequest:

  protected String resolveUser( HttpRequest request ){
    String ret = null;

    Optional<Principal> principal = request.getUserPrincipal();
    if( principal.isPresent() ){
      ret = principal.get().getName();
    }

    if( ret == null || ret.length() == 0 ){
      ret = "unknown";
    }
    return ret;
  }

Cognito identityId öğesinin dize adında ne geliyor? Bunun gibi bir şey:

Bize-doğu-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx

Ben ya gerçek kullanıcı giriş günlüğü ya da en azından gerektiğinde kimlik giriş için dönüştürmek için bir yol var istiyorum.

LookupDeveloperIdentity API çağrısı bu konuda en doğru yol gibi görünmektedir, ama işe almak veremiyoruz.

Bunu Java ve AWS Java SDK 2 ile yapmaya çalışmak:

  protected String loadUsername( String user ){
    String ret = "unknown:"+user;
    CognitoIdentityClient cognito = CognitoIdentityClient.create();

    LookupDeveloperIdentityRequest request = LookupDeveloperIdentityRequest.builder()
      .identityPoolId( identityPoolId )
      .identityId( user )
      .build();
    LookupDeveloperIdentityResponse response = cognito.lookupDeveloperIdentity( request );
    List<String> identifiers = response.developerUserIdentifierList();
    if( identifiers != null && identifiers.size() > 0 ){
      ret = identifiers.get( 0 );
    }

    return ret;    
  }

bir istisna atar

software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException: Bu kimliğe erişiminiz yok (Hizmet: CognitoIdentity, Durum Kodu: 400, İstek Kimliği: 64e36646-612b-4985-91d1-82aca770XXXX)

Bunu CLI aracılığıyla yapmaya çalışmak benzer bir sonuç doğurur:

aws cognito-kimlik arama-geliştirici-kimlik - kimlik-kimliği us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1: xxxx0aa1-89f9-4418-be04- 7e83c838xxxx --max-sonuçları = 10

LookupDeveloperIdentity işlemi çağrılırken bir hata oluştu (NotAuthorizedException): Bu kimliğe erişiminiz yok

Yürürlükteki IAM politikasının bununla başa çıkabileceğinden emin oldum ve bu politikaya sahip olmayan bir rolle denediğimde farklı bir hata alıyorum

    {
        "Effect": "Allow",
        "Action": [
            "cognito-identity:LookupDeveloperIdentity"
        ],
        "Resource": [
            "arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
        ]
    }

Sorular şu şekilde kayboluyor:

  • Kimlik havuzu kimliğinden kullanıcı havuzu kullanıcı adını almanın en iyi yolu bu mu?
    • Eğer öyleyse - yanlış ne yapıyorum?
    • Değilse - bunu yapmanın daha iyi bir yolu nedir?

Daha yüksek hacimli işlemler için önerilen yaklaşım olan docs.aws.amazon.com/cognitoidentity/latest/APIReference/… 'yi deneyebilir misiniz? Are you sure you are using the credentials from the account which owns the identity pool you are requesting lookupDeveloperIdentity for?- forums.aws.amazon.com/thread.jspa?threadID=231354 Benim için IAM rol sorunu değil, bir kullanıcı izni gibi görünüyor.
Jan Garaj

Bunu da denedim ve aynı hata mesajını aldım. Kimlik havuzuna sahip olan hesaptaki kimlik bilgilerini kullandığımdan eminim - havuzdaki diğer işlemler iyi çalışıyor. Bu bir kullanıcı izni olmak gibi görünüyor ... garip ... ama öyleyse, bir sunucu için nasıl kullanıcı izni alacağımı bilmek isterim.
Mahkum

Yanıtlar:


6

Alternatif yaklaşım

Kullanıcının Kullanıcı Havuzu kullanıcı kimliğini almak için lambda'nızdan alabilirsiniz:

authProvider = event.requestContext.identity.cognitoAuthenticationProvider;

Bu, kullanıcının Kullanıcı Havuzu kullanıcı kimliğini içeren bir dize döndürür ve şöyle görünecektir:

cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr

Us-east-1_aaaaaaaaa Kullanıcı Havuzu kimliği ve qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr Kullanıcı Havuzu Kullanıcı Kimliği'dir. Daha sonra dizeyi bölebilir ve kullanıcı kimliğini çıkarabilirsiniz.

Bu bilgilerin, kullandığınız kimlik doğrulama sağlayıcısına bağlı olarak farklı olacağını unutmayın.

Daha sonra kullanıcı kimliği yerine kullanıcı adına ihtiyacınız varsa, söz konusu kullanıcı kimliği için uygun ayrıntıları alarak doğrudan kullanıcı havuzundan çıkarabilirsiniz.

Referans

https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html


Kabul edildi (gecikmeli olarak, ancak bonus temsilcisine sahip olduğunuza sevindim), bu sayfadaki belgeler bile "Aşağıdaki işlem belgelenmemiş olsa da" bunu yapmanın gerçek bir belgelenmiş yolu olmasını diliyorum.
Mahkum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.