13

Google シングル サインオン用に開いているすべてのブラウザー タブで迷ってしまいます :)

Google マーケットプレイスに掲載したいアプリケーションが既にあります。また、必須の統合は Google SSO です。Spring を使用して Struts2 でアプリケーションを構築しました。

ですから、この統合を行う方法についていくつかの指示が必要です。例は完璧です。または、どのように開始するか、どのテクノロジーを使用するか、最良のアプローチ、類似するもの...

また、SSO 統合のために Google App Engineを使用する必要がありますか? 正直なところ、私は混乱しています:)

編集

私はここから始めました: developers.google.com/google-apps/marketplace/sso私はJavaを使っているので、一番下のはじめにを見ると、step2を使いたかったのですが、リンクが死んでいます。そこから行き詰まりました…

ここのリンクも死んでいます。

4

2 に答える 2

9

ApacheのHttpClientで作りました。これが私の解決策であり、私にとっては完璧に機能します。

認証 URL への最初のポイント:

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email&state=%2Fprofile&response_type=code&client_id=<YOUR_CLIENT_ID>&redirect_uri=<YOUR_CALLBACK_URL>

次に、あなたからパラメータを取得し、取得redirect_uriするためのリクエストボディを構築しますaccess_token:

    String code =  request.getParameter("code");
    String foros = "code="+code +
                "&client_id=<YOUR_CLIENT_ID>" +
                "&client_secret=<YOUR_CLIENT_SECRET>" +
                "&redirect_uri="+getText("google.auth.redirect.uri") +
                "&grant_type=authorization_code";

次に、HttpClient を使用して POST を作成し、単純な JSON パーサーを使用してアクセス トークンを解析します。

    HttpClient client = new HttpClient();
    String url = "https://accounts.google.com/o/oauth2/token";
    PostMethod post = new PostMethod(url);
    post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    try {
        post.setRequestEntity(new StringRequestEntity(foros, null, null));
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e);
    }
    String accessToken = null;
    try {
        client.executeMethod(post);
        String resp = post.getResponseBodyAsString();
        JSONParser jsonParser = new JSONParser();
        Object obj = jsonParser.parse(resp);
        JSONObject parsed = (JSONObject)obj;            
        accessToken = (String) parsed.get("access_token");
    } catch (HttpException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }

これでアクセス トークンが取得され、すべての Google API にアクセスできるようになりました。たとえば、すべてのユーザー情報を取得するには:

    GetMethod getUserInfo = new GetMethod("https://www.googleapis.com/oauth2/v1/userinfo?access_token="+accessToken);

    String googleId = null;
    String email = null;
    String name = null;
    String firstName = null;
    String lastName = null;
    try {
        client.executeMethod(getUserInfo);
        String resp = getUserInfo.getResponseBodyAsString();
        JSONParser jsonParser = new JSONParser();
        Object obj = jsonParser.parse(resp);
        JSONObject parsed = (JSONObject)obj;
        googleId = (String) parsed.get("id");
        email = (String) parsed.get("email");
        name = (String) parsed.get("name");
        firstName = (String) parsed.get("given_name");
        lastName = (String) parsed.get("family_name");
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }

このデータを保存して、アプリケーションへのログインに使用できます。

于 2012-09-26T18:01:09.737 に答える
4

シングル サインオンの実行方法を説明している Google Apps Marketplace の Java チュートリアルに従うことができます: https://developers.google.com/google-apps/marketplace/tutorial_java

チュートリアルには、ステップ 2 を含むアプリケーション ソースとすべての必要なライブラリを含む zip のダウンロード リンクも含まれています: http://apps-marketplace-resources.googlecode.com/files/helloworld-java-2011050303.zip

ドキュメント内の壊れたものの有効なリンクは次のとおりです。

于 2012-09-07T09:10:14.080 に答える