JSPで行こう!

OAuth2の使用

 サイトの認証では、独自の認証に加えて、Google や Facebook 等の
外部の認証も使えると、利用者の利便性が増します。

Google による外部認証

Google を例に外部認証を行いたいと思います。
Facebook 等でも同様に出来るはずです。

「認証」と「認可」の違い。
「認証」は、単に「ID」が本人であるかどうかの確認ですが、
「認可」では、あなたの属性情報や操作の権限を私(=アプリケーション)に認めることになります。

前準備

Google API を使う手順はいつも同じです。

「Google Cloud Console」にログインし、プロジェクトを作成して、
アプリケーションに必要な設定を行います。
細かい手順は、画面を使いながら説明していかないといけないので、ここでは割愛させていただきます。

最終的に必要なのは、

また、Google Cloud Console 側で以下の設定が必要です
リダイレクトURIは、自分(アプリケーション)の受けるプログラムのURIを設定しておきます。
Google の場合、IP指定は出来ません。"localhost"かドメイン名です。
なお、ドメイン名は、インターネット上のもので無くてもかまいません。
例えば、会社内ではプライベートな名前を使っていると思いますが、それでもかまいません。
「リダイレクト」ですから、あくまでブラウザが名前解決出来れば良いだけです。

「http」でも良いですが、リダイレクトの際、ブラウザが警告する場合があります。

実装

ざっくりした手順ですが、次の通りです。

  1. 認可を依頼する URL を呼び出す。
  2. リダイレクト先に結果「認可コード」が返される。
  3. 「認可コードを」を使って、「アクセストークン」を取得する
  4. 「アクセストークン」から認可された情報を取得する
  5. 必要ならユーザー登録をする

初めての方には何か面倒そうに思えるかもしれません。
「認可コード」は1回限り有効です。(保存しても意味がありません)
「アクセストークン」は短い有効期間があります。(といっても60分位あります)
それ以降の google とのやり取りは、このアクセストークンを使って行います。

このほかにも「アクセストークン」を再取得する「リフレッシュトークン」もありますが、ここでは説明しません。

認可コードを取得する

手順の1、2は JSP で簡単にテストできます。
認証をGoogleに依頼するJSP と、Googleからの応答を受ける、リダイレクト先の JSP の
2つの jsp ファイルを用意します。
1つは利用者用で、リダイレクトされる JSP はアプリケーション管理者用
と考えて下さい。

リダイレクト先の JSP の URI は Google 側にも設定しておく必要があります。

・呼び出しJSPの例 (html だけでも書けます)

取得したクライアントIDとリダイレクトURIを設定します。
あと、スコープが必要です。スコープは下記リンクから使うサービスの中から選択します。
OAuth 2.0 Scopes for Google APIs

<%@ page contentType="text/html; charset=UTF-8" %>

<%
  request.setCharacterEncoding("UTF-8");

  String client_id = ""; // 取得した値を設定します
  String scope = ""; // 認可で取得したい情報
  String redirect_url = ""; // 認可後に受ける自分の場所

  String auth_url = "https://accounts.google.com/o/oauth2/auth"
           + "?client_id=" + client_id
           + "&redirect_uri=" + redirect_url
           + "&scope=" + scope
           + "&response_type=code"
           + "&approval_prompt=force"
           + "&access_type=offline"
           ;
%>
<!doctype html>
<html>
<body>
  <a href="<%=auth_url%>">Googleで認証</a>
</body>
</html>

・リダイレクト先のJSPの例

<%@ page contentType="text/html; charset=UTF-8" %>

<%
  request.setCharacterEncoding("UTF-8");

  String code = (String)request.getParameter("code");
%>
<!doctype html>
<html>

<body>
  認可コード:<%=code%>
</body>
</html>

Google で認可を許可した後に、認可コードが表示されればOKです。

 

« 前頁 次頁 »