JavaベースのGoogleApp Engine、Android、認証oauth2

男の子

認証とアプリエンジン、それについて読むべきことがたくさんありますが、多くは時代遅れのようです!

Googleページでもhttps://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls

ここでは、「GoogleAccountCredential.usingAudience」について説明していますが、最近はGoogleAuthUtilを使用する必要があります(私が知る限り、間違っている場合は修正してください)。

Androidアプリ(および将来的にはiOSアプリ)のバックエンドとしてアプリエンジンをセットアップしようとしています。

私はAndroidStudioを使用しており、「新しいモジュール」を使用して、そこでクラウドメッセージングを備えたアプリエンジンを選択しました。

単純なエンドポイントを作成し、そこに関数があります。ここにいくつかのコードがあります。

public class ReviewEndpoint {

// Make sure to add this endpoint to your web.xml file if this is a web application.

private static final Logger LOG = Logger.getLogger(ReviewEndpoint.class.getName());

/**
 * This method gets the <code>Review</code> object associated with the specified         <code>id</code>.
 * @param id The id of the object to be returned.
 * @return The <code>Review</code> associated with <code>id</code>.
 */
@ApiMethod(name = "getReview")
public Review getReview(@Named("id") Long id) {
    // Implement this function
    Review r = new Review();
    r.setData("test!");

ご覧のとおり、これはAndroidStudioによって適切に生成されています。'review'オブジェクトを作成し、最後に返すようないくつかのstufを実装しました。

Android側では、次のことができます。

ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null);
ReviewEndpoint ep = b.build();
Review review = ep.getReview(1L).execute();
data = review.getData();

はい、「テスト」を取得します。:)

今、私はこれを認証してもらいたいです。どのユーザーが何を書いたか知りたいので、後でGMailアカウントとFacebookを使うつもりでした。

ここで私は立ち往生しています。Androidのユーザーからトークンを取得できます。

token = GoogleAuthUtil.getToken(MainScreenActivity.this, mAccount.name, "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile");

次に、このトークンを資格情報としてリクエストに追加できます。

Credential cr = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(token);
ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), cr);

次に、アプリエンジンでユーザー情報を取得しようとしましたが、どうすればよいですか?「ベアラー」として提供されますか?このベアラートークンを取得するにはどうすればよいですか?次に、サーバー上のデータを取得するためにAPIリクエストを実行する必要がありますか?

これは動作しません:

OAuthService service = OAuthServiceFactory.getOAuthService();
try {
    User user = service.getCurrentUser();

誰かが私に頭を上げることができますか?

男の子

それで、ついに、今日、私はそれをする方法を見つけました!私は以前にこれについてStackoverflowについて質問があり、答えはありませんでしたが、サイトへのこれらは私に答えを与えました:

https://developers.google.com/appengine/docs/java/endpoints/auth

https://developers.google.com/appengine/docs/java/endpoints/consume_android

1つ目は、アプリエンジン側で何をする必要があるかを示しています。2番目のページでは、資格情報を取得する方法を説明します。私はかなり近かった。2番目のリンクに記載されているbuild.gradleファイルの調整が必要かどうかはわかりません。App Engineに追加したもの:

@Api(name = "reviewEndpoint", version = "v1", ...<<some more stuff here >>
    scopes = {Constants.EMAIL_SCOPE},
    clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE})

次に、資格情報を取得します。

// Initialize the scope using the client ID you got from the Console.
final String scope = "server:client_id:" + Constants.WEB_CLIENT_ID;

credential = GoogleAccountCredential.usingAudience(activity,scope);

ユーザーの電子メールアドレスを追加する必要があります。

credential.setSelectedAccountName("[email protected]");

アカウントピッカーを使用して電子メールアドレスを取得できます(リンクをたどると例も表示されます)

そして次に。資格情報を使用してエンドポイントに電話をかけると、Playサービスがユーザーを検証すると思います。これは、デバイスにログインしていない電子メールを使用すると機能しないためです。次のコードはGoogleAuthIOExceptionをスローします:

ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(
    AndroidHttp.newCompatibleTransport(), 
    new AndroidJsonFactory(), id_token);
ReviewEndpoint ep = b.build();
Review review;
review = ep.getReview(1L).execute();

テストのために、サーバー側で取得した電子メールアドレスを文字列としてレビューオブジェクトに入力しました。ユーザーオブジェクトがnullではなく、電子メールアドレスが表示されました。わぁ!私はあなたに言うのを忘れました、あなたはアプリエンジン側でユーザー引数が必要です。上記の「getReview」呼び出しに「user」引数が表示されていなくても、AppEngineによって追加されます。

これが私のgetReviewの外観です。

@ApiMethod(name = "getReview")
public Review getReview(@Named("id") Long id, User user) {
    // Implement this function
    Review r = new Review();

    r.setData("user == " + (user == null ? "NULL " : user.toString()));

これが誰かを助けることを願っています

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

APIのOAuth2認証/承認

分類Dev

PythonでのAPIのOAuth2認証

分類Dev

UnityでのOAuth2認証と操作

分類Dev

API認証とOAuth2の使用

分類Dev

Javaでの認証の問題Oauth2

分類Dev

OAuth2認証コードフローのOpenAPI / Swagger仕様

分類Dev

内部アプリケーションのOAuth2認証

分類Dev

Vert.x Oauth2認証サーバー

分類Dev

GolangでのOauth2認証情報の保存

分類Dev

admin-on-rest での認証と OAuth2 の実装

分類Dev

ネイティブアプリ(Android)を使用してOauth2の認証コードを保護する

分類Dev

Spring OAuth2認証サーバー:特定の/ oauth / tokenフィルター?

分類Dev

OAuth2多要素認証のnullクライアント

分類Dev

OAuth2を使用したOffice365でのIMAP認証

分類Dev

ServiceStack .NETCore用のOAuth2認証プラグイン

分類Dev

認証用のOAuth2ではありませんか?

分類Dev

Kubernetesnginx入力+ oauth2外部認証のタイムアウト

分類Dev

iOSでのOAuth2による認証

分類Dev

ネイティブアプリのOAuth2認証

分類Dev

Google oauth1のoauth2への移行:無効な認証ヘッダー

分類Dev

RESTfulサービスでのカスタム手動Oauth2認証

分類Dev

糸の自己更新がOAuth2認証エラーをスローする

分類Dev

パッケージ「golang.org/x/oauth2」を使用したoauth2での認証

分類Dev

同じリソースへのSpring Security OAuth2とLdap認証

分類Dev

Firebase-カスタムoAuth2サービス-認証コード?

分類Dev

春のoauth2認証コードフロー、VKの構成(Vkontakte)

分類Dev

春のoauth2認証コードフロー、VKの構成(Vkontakte)

分類Dev

Spring OAuth2カスタム認証マネージャーClassCastException

分類Dev

Google Cloud Endpointsのカスタム認証(OAuth2の代わり)

Related 関連記事

  1. 1

    APIのOAuth2認証/承認

  2. 2

    PythonでのAPIのOAuth2認証

  3. 3

    UnityでのOAuth2認証と操作

  4. 4

    API認証とOAuth2の使用

  5. 5

    Javaでの認証の問題Oauth2

  6. 6

    OAuth2認証コードフローのOpenAPI / Swagger仕様

  7. 7

    内部アプリケーションのOAuth2認証

  8. 8

    Vert.x Oauth2認証サーバー

  9. 9

    GolangでのOauth2認証情報の保存

  10. 10

    admin-on-rest での認証と OAuth2 の実装

  11. 11

    ネイティブアプリ(Android)を使用してOauth2の認証コードを保護する

  12. 12

    Spring OAuth2認証サーバー:特定の/ oauth / tokenフィルター?

  13. 13

    OAuth2多要素認証のnullクライアント

  14. 14

    OAuth2を使用したOffice365でのIMAP認証

  15. 15

    ServiceStack .NETCore用のOAuth2認証プラグイン

  16. 16

    認証用のOAuth2ではありませんか?

  17. 17

    Kubernetesnginx入力+ oauth2外部認証のタイムアウト

  18. 18

    iOSでのOAuth2による認証

  19. 19

    ネイティブアプリのOAuth2認証

  20. 20

    Google oauth1のoauth2への移行:無効な認証ヘッダー

  21. 21

    RESTfulサービスでのカスタム手動Oauth2認証

  22. 22

    糸の自己更新がOAuth2認証エラーをスローする

  23. 23

    パッケージ「golang.org/x/oauth2」を使用したoauth2での認証

  24. 24

    同じリソースへのSpring Security OAuth2とLdap認証

  25. 25

    Firebase-カスタムoAuth2サービス-認証コード?

  26. 26

    春のoauth2認証コードフロー、VKの構成(Vkontakte)

  27. 27

    春のoauth2認証コードフロー、VKの構成(Vkontakte)

  28. 28

    Spring OAuth2カスタム認証マネージャーClassCastException

  29. 29

    Google Cloud Endpointsのカスタム認証(OAuth2の代わり)

ホットタグ

アーカイブ