App Engine 엔드 포인트에 대한 사용자 인증

빵 굽는 사람

첫 번째 앱 엔진 앱을 만들고 있으며 사용자 인증에 문제가 있습니다.

나는 https://cloud.google.com/appengine/docs/python/endpoints/consume_android#making_authenticated_calls를 따랐습니다 -약간 마법처럼 보이지만 "setAccountName"만 있고 작동해야하지만, w / e, Android Audience에서 앱 범위를로드해야한다고 추측 한 다음 전달한 계정 이름이 실제로 기기에 로그인했는지 확인합니다.

API 호출이 작동하고 인증을 통과하지만 슬프게도 백엔드의 "endpoints.get_current_user ()"함수는 None을 반환합니다.

그래서 계속 파고 있었지만 주제에 대해 아무것도 찾을 수없는 것 같습니다. 내가 찾은 가장 좋은 점은 http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app입니다 .하지만 이것은 6 년 전의 기사이며 저자는 HTTP 클라이언트를 사용합니다. 끝점 libs와 관련이 없습니다.

내가 생각할 수있는 것은 내 앱에 "Google로 로그인"을 추가하는 "비 엔드 포인트"방식을 따른 다음 내 API 빌더에 가져올 자격 증명을 전달하는 것입니다.하지만 그게 잘못된 것 같습니다. 그렇게하는 더 쉬운 방법이 될 것입니다.

따라서 https://cloud.google.com/appengine/docs/python/endpoints/consume_android#making_authenticated_calls 에서 언급되지 않은 몇 가지 단계가 누락 되었습니까?

아래의 실제 코드 (약간 단순화 됨) :

백엔드 :

auth_api = endpoints.api(
    name='auth_api',
    version='v1.0',
    auth_level=endpoints.AUTH_LEVEL.REQUIRED,
    allowed_client_ids=[
        ANDROID_CLIENT_ID,
        WEB_CLIENT_ID,
        endpoints.API_EXPLORER_CLIENT_ID,
    ],
    audiences=[
        WEB_CLIENT_ID,
        endpoints.API_EXPLORER_CLIENT_ID,
    ],
    scopes=[
        'https://www.googleapis.com/auth/userinfo.profile',
        'https://www.googleapis.com/auth/userinfo.email',
    ],
)


@auth_api.api_class(resource_name='rating')
class RatingHandler(remote.Service):
    @endpoints.method(
        message_types.VoidMessage,
        RatingsMessage,
        path='rating/getRatings',
        http_method='GET',
    )
    def getRatings(self, request):
        rating_query = Rating.query(
            ancestor=ndb.Key(
                Account,
                endpoints.get_current_user().user_id(), // ERROR! endpoints.get_current_user() is None
            )
        ).order(-Rating.rating)

고객:

// Somewhere these lines exist
if (credential == null || credential.getSelectedAccountName() == null) {
    startActivityForResult(
        AuthUtils.getCredentials(getActivity()).newChooseAccountIntent(),
        AuthUtils.REQUEST_ACCOUNT_PICKER
    );
} else {
    LoadRatings();
}

@Override
public void onActivityResult(
    int requestCode,
    int resultCode,
    Intent data
) {
    super.onActivityResult(requestCode, resultCode, data);
    if (data != null && data.getExtras() != null) {
        String accountName =
            data.getExtras().getString(
                AccountManager.KEY_ACCOUNT_NAME
            );
        if (accountName != null) {
            credential = GoogleAccountCredential.usingAudience(
                getApplicationContext(),
                "server:client_id:" + Constants.ANDROID_AUDIENCE
            );
            credential.setSelectedAccountName(accountName);
            LoadRatings();
        }
    }
}

public void LoadRatings() {
    // AuthApi was auto-generated by Google App Engine based on my Backend
    AuthApi.Builder api = new AuthApi.Builder(
        AndroidHttp.newCompatibleTransport(),
        new AndroidJsonFactory(),
        credential
    ).setApplicationName(getPackageName());
    AuthApi service = api.build();
    try {
        ApiMessagesRatingRatedBeerListMessage result = service.rating().getRatings().
        // some stuff done with result, but the Exception is thrown in line above
빵 굽는 사람

좋아, 알아 냈어. API 선언에서 "범위"를 제거하면 작동합니다. 아직 사용자의 이메일 / 프로필에 액세스하는 방법을 잘 모르겠지만 적어도 한 단계 더 발전한 것입니다.

이 문제는 실제로 이전에 제기되었습니다 -GoogleCloud Endpoints에서 범위를 추가하는 방법 -슬프게도 답변이 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

App Engine 엔드 포인트에 사용자 지정 개체를 전달하는 방법

분류에서Dev

App Engine Search API로 Android 용 엔드 포인트를 사용하는 방법

분류에서Dev

Appengine 엔드 포인트 엔터티에 대한 사용자 지정 JSON 키

분류에서Dev

PHP에서 작동하는 Google App Engine 엔드 포인트를 사용 하시겠습니까?

분류에서Dev

Keycloak : 사용자 정의 엔드 포인트에 대한 REST의 URL

분류에서Dev

SwaggerUI를 사용하여 보호 된 자체 API 엔드 포인트로 IdentiyServer 4에 대해 인증합니다.

분류에서Dev

Spring OAuth : 인증 엔드 포인트 인증을위한 사용자 정의 양식

분류에서Dev

UnavailableException Google App Engine 엔드 포인트 프로젝트

분류에서Dev

App Engine 엔드 포인트에 도달하려고 할 때 SSLHandshakeException 발생

분류에서Dev

C # .NET Core를 사용하여 ING (api.sandbox.ing.com) 엔드 포인트에 대한 인증서 인증 API 호출을 만들 수 없습니다.

분류에서Dev

백엔드에서 Google App Engine 엔드 포인트 메서드를 실행하는 방법

분류에서Dev

JHipster REST 엔드 포인트에 연결하는 사용자 인증

분류에서Dev

AWS, 단일 휴식 엔드 포인트에 대한 사용자 지정로드 밸런서 규칙 추가

분류에서Dev

푸시 메커니즘 : 웹훅 엔드 포인트에 대한 인증

분류에서Dev

중첩 된 엔드 포인트에 대한 json-server의 사용자 지정 경로

분류에서Dev

nodejs의 모든 엔드 포인트에 대해 사용자 당 한 번 함수 실행

분류에서Dev

엔드 포인트에 대한 Java (Jersey 2 + Grizzly 2) JAX-RS 사용자 지정 리소스 주석?

분류에서Dev

Twitter API 사용-Bearer 토큰을 사용하여 참여 엔드 포인트에 대한 인증을 얻는 방법

분류에서Dev

프론트 엔드 Django Rest Framework에서 엔드 포인트에 대한 호출 만 허용

분류에서Dev

App Engine Endpoints 및 자바를 사용하여 Android에서 자체 인증

분류에서Dev

자체 제어 인증서를 사용하여 AWS S3 엔드 포인트에 대해 TLS를 활성화하는 방법은 무엇입니까?

분류에서Dev

https://accounts.spotify.com/api/token 엔드 포인트에 대한 프런트 엔드 JavaScript POST 요청 허용

분류에서Dev

CRUD에 대한 express.js API 엔드 포인트 모범 사례

분류에서Dev

Google App Engine Cron이 특정 시간에 엔드 포인트를 트리거하지 않음

분류에서Dev

Java Mail에 대한 App Engine의 샘플 코드를 사용하여 기호를 확인할 수 없습니다.

분류에서Dev

wso2 API 관리자 | 클라이언트 인증서를 백엔드 / 대상 엔드 포인트에 연결하는 방법

분류에서Dev

프런트 엔드에서 AWS congnito 인증을 사용한 Spring 보안 구현

분류에서Dev

인증 된 사용자에게만 API 엔드 포인트에 대한 액세스 권한을 부여하기 위해 로그인 화면으로 swagger UI를 잠그는 방법

분류에서Dev

Google App Engine 엔드 포인트에서 배열 응답을 반환하는 방법

Related 관련 기사

  1. 1

    App Engine 엔드 포인트에 사용자 지정 개체를 전달하는 방법

  2. 2

    App Engine Search API로 Android 용 엔드 포인트를 사용하는 방법

  3. 3

    Appengine 엔드 포인트 엔터티에 대한 사용자 지정 JSON 키

  4. 4

    PHP에서 작동하는 Google App Engine 엔드 포인트를 사용 하시겠습니까?

  5. 5

    Keycloak : 사용자 정의 엔드 포인트에 대한 REST의 URL

  6. 6

    SwaggerUI를 사용하여 보호 된 자체 API 엔드 포인트로 IdentiyServer 4에 대해 인증합니다.

  7. 7

    Spring OAuth : 인증 엔드 포인트 인증을위한 사용자 정의 양식

  8. 8

    UnavailableException Google App Engine 엔드 포인트 프로젝트

  9. 9

    App Engine 엔드 포인트에 도달하려고 할 때 SSLHandshakeException 발생

  10. 10

    C # .NET Core를 사용하여 ING (api.sandbox.ing.com) 엔드 포인트에 대한 인증서 인증 API 호출을 만들 수 없습니다.

  11. 11

    백엔드에서 Google App Engine 엔드 포인트 메서드를 실행하는 방법

  12. 12

    JHipster REST 엔드 포인트에 연결하는 사용자 인증

  13. 13

    AWS, 단일 휴식 엔드 포인트에 대한 사용자 지정로드 밸런서 규칙 추가

  14. 14

    푸시 메커니즘 : 웹훅 엔드 포인트에 대한 인증

  15. 15

    중첩 된 엔드 포인트에 대한 json-server의 사용자 지정 경로

  16. 16

    nodejs의 모든 엔드 포인트에 대해 사용자 당 한 번 함수 실행

  17. 17

    엔드 포인트에 대한 Java (Jersey 2 + Grizzly 2) JAX-RS 사용자 지정 리소스 주석?

  18. 18

    Twitter API 사용-Bearer 토큰을 사용하여 참여 엔드 포인트에 대한 인증을 얻는 방법

  19. 19

    프론트 엔드 Django Rest Framework에서 엔드 포인트에 대한 호출 만 허용

  20. 20

    App Engine Endpoints 및 자바를 사용하여 Android에서 자체 인증

  21. 21

    자체 제어 인증서를 사용하여 AWS S3 엔드 포인트에 대해 TLS를 활성화하는 방법은 무엇입니까?

  22. 22

    https://accounts.spotify.com/api/token 엔드 포인트에 대한 프런트 엔드 JavaScript POST 요청 허용

  23. 23

    CRUD에 대한 express.js API 엔드 포인트 모범 사례

  24. 24

    Google App Engine Cron이 특정 시간에 엔드 포인트를 트리거하지 않음

  25. 25

    Java Mail에 대한 App Engine의 샘플 코드를 사용하여 기호를 확인할 수 없습니다.

  26. 26

    wso2 API 관리자 | 클라이언트 인증서를 백엔드 / 대상 엔드 포인트에 연결하는 방법

  27. 27

    프런트 엔드에서 AWS congnito 인증을 사용한 Spring 보안 구현

  28. 28

    인증 된 사용자에게만 API 엔드 포인트에 대한 액세스 권한을 부여하기 위해 로그인 화면으로 swagger UI를 잠그는 방법

  29. 29

    Google App Engine 엔드 포인트에서 배열 응답을 반환하는 방법

뜨겁다태그

보관