OpenAM情報取得 java - mitsuaki0717/shino-repo GitHub Wiki

import java.io.;
import javax.servlet.
;
import javax.servlet.http.*;

public class test{
// OAuth2 Parameters
private static String CLIENT_ID = “relyingparty”;
private static String CLIENT_SECRET = “P@ssw0rd”;
private static final String SSO_HOST = “https://test-cent.test.com:443/openam/”;
private static final String SCOPE = “openid profile”;

// openAM endpoint url private static final String AUTHORIZATION_SERVER_URL = SSO_HOST + “oauth2/authorize”; private static final String TOKEN_SERVER_URL = SSO_HOST + “oauth2/access_token”; private static final String PROFILE_SERVER_URL = SSO_HOST + “oauth2/userinfo”;

}
// redirect url from openAM
// 認証サーバからリダイレクトで戻って来るURL。
// 結果を受け取るサーブレットがcallされるようにセットしてね。
// (事前にOpenAMのOAuthエージェントに設定したURLじゃないとだめ)
private static final String REDIRECT_URL = “https://localhost:8080/webservice/OAuthLogin/oauth2Callback”

//認可コード受け取りメソッド
public String oauth2Callback() {

// OpenAM が "code"という名前のパラメータをくれるので受け取る。 String code = ((String[])request.getParameterMap().get(“code”))0; //TODO: codeがない場合の処理(直接たたいたとか) // もらったcodeを使ってアクセストークンを取りに行くメソッドをたたく。 String accesstoken = OAuthUtil.getAccessToken(code); // アクセストークンをセッションにでもつっこんでおくか。 commonDto.setAccessToken(accesstoken); // アクセストークンを使ってユーザ情報を取ってくるぞ UserDto user = OAuthUtil.getProfileData(accesstoken); // 取ってきたユーザ情報をセッションに入れちゃう。 Beans.copy(user, userDto).execute(); userDto.setUserid(user.getSub()); userDto.setUsername(user.getName()); // 認証OK後の画面に遷移するぞ!

}

//アクセストークン取得メソッド
public static String getAccessToken(String code) {

// tokenを取得 TokenResponse tr = getTokenResponse(code); return tr.getAccessToken();

}

private static TokenResponse getTokenResponse(String code) {
// アクセストークンをもらうためのURLを作る
AuthorizationCodeTokenRequest tokenUrl = new AuthorizationCodeTokenRequest(
HTTP_TRANSPORT,
JSON_FACTORY,
new GenericUrl(TOKEN_SERVER_URL),
code
);
tokenUrl.setGrantType(“authorization_code”);
tokenUrl.setRedirectUri(REDIRECT_URL);
tokenUrl.set(“client_id”, CLIENT_ID);
tokenUrl.set(“client_secret”, CLIENT_SECRET);

TokenResponse tr = null; try { tr = tokenUrl.execute(); } catch (IOException e) { e.printStackTrace(); } return tr;

}

//ユーザ情報取得メソッド
public static UserDto getProfileData(String accessToken) {
// profile情報をJSONで作るメソッドをキック
String data = getProfileJson(accessToken);

Gson gson = new Gson(); UserDto user = gson.fromJson(data, UserDto.class); return user;

}

private static String getProfileJson(String accessToken) {
try {

// profile取得用エンドポイントにアクセスするURLを作る URL url = new URL; // HTTP通信するぞ HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); // この辺は決まった形式。アクセストークンもこんな感じでOpenAMに渡す。 connection.setRequestProperty(“Authorization”, String.format(“Basic %s”, accessToken)); connection.setRequestProperty(“Content-Type”, “application/json”); connection.setRequestProperty(“Accept”, “/”); connection.setRequestMethod(“POST”); connection.connect(); int responseCode = connection.getResponseCode(); //System.out.println("\nSending ‘POST’ request to URL : " + url); //System.out.println("Response Code : " + responseCode); switch(responseCode) { case 200: case 201: // 戻ってくるのはJSON文字列。全部読み取って返すとか。 InputStream content = (InputStream) connection.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(content)); String line; StringBuilder sb = new StringBuilder(); while ((line = in.readLine()) != null) { //System.out.println("\n line : " + line); sb.append(line+"\n"); } in.close(); return sb.toString(); default: return ""; } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return ""; }

}

⚠️ **GitHub.com Fallback** ⚠️