アーカイブ

‘OpenID’ カテゴリーのアーカイブ

OpenID RP を Google App Engine (java) で (dyuproject)

2010 年 3 月 18 日 tdtsh Comments off

 
前回も書きましたが、GAE/J上ではSocketが使えない。故にopenid4javaはGAEでは使えない。

でも、dyuprojectは動くし、動かした上にコードを公開されている方もいる。

どうやらGAE/Jの URLフェッチ API を使っている模様。そりゃそれしか方法はないですよね。

私は職業プログラマでは無いので、車輪の再開発どころか、なるべくコードは書きたくないんです。
早速、dyprojectにトライしてみましょう。
 
 


dyuproject-openid-1.1.6-jarjar.jar のダウンロード

dyuprojectDownloadsから、dyuproject-1.1.6.zipをダウンロードします。

JavaDocとか他のライブラリとかデモが不要なら、dyuproject-openid-1.1.6-jarjar.jar でもいいです。
 
 


eclipseのGAEプロジェクトへライブラリを追加する

ダウンロードしたzipファイルの、/dist に、dyuproject-openid-1.1.6-jarjar.jar はあります。
それを、eclipse の /war/WEB-INF/lib/にコピーします。

eclipseを起動して、war/WEB-INF/lib/ の下にコピーしたjarファイルを右クリックして、[ビルド・バス(B)] – [ビルド・パスに追加(A)]をクリックします。

念のため、プロジェクトの[参照ライブラリー]に追加されている事を確認します。
 
 


/WEB-INF/web.xml に追記する

QuickStartOpenid – dyuprojectのんを参考にしながら書きます。
ちょっとだけ手を加え (ログアウト用サーブレットを追加とか) ましたが、基本的に同じです。

<filter>
    <filter-name>openid-filter</filter-name>
    <filter-class>com.dyuproject.openid.OpenIdServletFilter</filter-class>
    <init-param>
        <param-name>forwardUri</param-name>
        <param-value>/</param-value>
    </init-param>
</filter> 

<filter-mapping>
    <filter-name>openid-filter</filter-name>
    <url-pattern>/openid-login</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>openid-filter</filter-name>
    <url-pattern>/openid-logout</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>openid-servlet</servlet-name>
    <servlet-class>my.package.OpenIdLoginServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>openid-servlet</servlet-name>
    <url-pattern>/openid-login</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>openid-logout</servlet-name>
    <servlet-class>my.package.OpenIdLogoutServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>openid-logout</servlet-name>
    <url-pattern>/openid-logout</url-pattern>
</servlet-mapping>

ログイン用サーブレットを作る

QuickStartOpenid – dyuprojectのサンプルコードにほんに少しだけ異常系を付け足しただけです。

package my.package;

import com.dyuproject.openid.RelyingParty;
import com.dyuproject.openid.ext.AxSchemaExtension;
import com.dyuproject.openid.OpenIdUser;

public class OpenIdLoginServlet extends HttpServlet {

    static {
        RelyingParty.getInstance()
        .addListener(new AxSchemaExtension()
            .addExchange("email")
            .addExchange("nickname")
            .addExchange("fullname")
            .addExchange("gender")
            .addExchange("postcode")
            .addExchange("country")
            .addExchange("language")
        );
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        OpenIdUser user = (OpenIdUser) request.getAttribute(OpenIdUser.ATTR_NAME);
        if (user != null) {
            String identity = user.getIdentity();
            HttpSession session = request.getSession();
            session.setAttribute("identity", identity);
            Map axschema = AxSchemaExtension.get(user);
            if (axschema != null && axschema.size() > 0) {
                session.setAttribute("email", axschema.get("email"));
                session.setAttribute("nickname", axschema.get("nickname"));
            } else {
                session.setAttribute("email", "unknown");
                session.setAttribute("nickname", identity);
            }
        } else {
            //
        }
        response.sendRedirect(response.encodeRedirectURL(request.getParameter("redirect_url")));
    }

}

 
 


ログアウト用サーブレットを作る

QuickStartOpenid – dyuprojectにはサンプルが無かったけど、ログインしっぱなしじゃ困るから、ログアウト用サーブレットも作ります。

package my.package;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.RequestDispatcher;

public class OpenIdLogoutServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        HttpSession session = request.getSession(false);
        session.invalidate();
        response.sendRedirect(response.encodeRedirectURL(request.getParameter("redirect_url")));

    }
}

 
 


動かす

あとはHTMLでいいので、OpenIDプロバイダのURLを引数 “openid_identifier”にセットして、サーブレットに渡すAタグなり、フォームなりを書いて実行します。

mixi OpenIDならこんな感じですね。

<a href="openid-login?openid_identifier=https://mixi.jp">mixiでログインします</a>

なんて簡単なんでしょう。

サンプルコードでは、mixi、Google、Yahoo!、openid.ne.jp は動きました。
hatena はうまくいきませんでした。なんでだろう。

nickNameが取れたのはmixiだけでした。

 
 


カテゴリー: Google App Engine, OpenID, java タグ:

GAE java (Google App Engine) 上でのOpenID と まとめ

2009 年 9 月 4 日 tdtsh Comments off

GAE/JでOpenIDのRPを実装したい。

個人で作るWEBサービスなら兎も角、法人の場合とかはGAE上にメールアドレスとかの個人情報をぶっこみたく無い、なんてニーズは当然あると思う (実際にわたしがそうです) んです。

前から何となく疑問に思っていました。
Google App Engine (Java) で OpenIDを動かすにはどーすれば?

openid4javaはソケットを使用するけど、GAEのJREサンドボックス上では使えない。故に動かない。

Java で OpenID を扱う情報って少なくないですか? – イトウ アスカ blog
少ないですね。ひっしで集めてます。

Tsukuyomi OpenID – このプロジェクトについての様な先人もおられます。

Implement OpenID consumer in App Engine (Java) – Google App Engine | Google グループ

こんなのがあるらしい。(2010-03-10 下に追記あり)
dyuproject – Project Hosting on Google Code

java REST framework servlet-based (Java REST Annotations impl), openid 2.0 relying party, oauth 1.0a consumer and service provider, json-ioc

こんなのも。
App Engine Recipe – Accept Google, AOL, Yahoo, MySpace, Facebook, and OpenID Logins

RPX (http://rpxnow.com/) is a free service which authenticates users via OpenID and other protocols for your website. It speaks the individual protocol APIs, and exposes a simple restful interface for you to access both authentication and profile data from Identity Providers like Google, AOL, Yahoo, Facebook, and MySpace. RPX also provides you with a popup and iframe based widget that you may add to your site to help your users choose their authentication provider.

RPX( http://rpxnow.com/ )は、 OpenIDを、あなたのウェブサイトの他のプロトコルを介して、ユーザー認証の無料サービスです。
個々のプロトコルのAPIを話し、あなたのための両方の認証およびアイデンティティプロバイダーGoogleは、 AOLやヤフー、 Facebookのようにからのプロファイルデータにアクセスするためのシンプルな安らかなインターフェイスを公開し、 MySpaceの。 RPXもポップアップとインラインフレームベースのウィジェットとは、お客様のサイトにユーザーが選択するための認証プロバイダを追加することができます提供しています。

良いもの。悪いもの。: Google App Engineを利用してmixiアプリを作成する

Implement OpenID consumer in App Engine (Java) – Google App Engine | Google グループ
誰もなんも返事できないみたい。

 

 


追記 2010-03-10
Google様で 「OpenID GAE」で検索すると、いつの間にか当サイトが1位になっちゃっています。そんだけマイナーな組み合わせなのか・・・


追記 2010-03-18
先述のdyuprojectで、OpenID RPを実際にGAE/Jで動かされた方がおられるようです。
Google App Engine for JavaでOpenIDを試してみた。 – 後ろ回しゲロ
サンプルコードまで公開してくださっています。

わたしもdyuprojectを使って挑戦してみました。
あわせてご覧ください

カテゴリー: Google App Engine, OpenID, java, クラウド タグ:

bookmarks 2009-07-27 (OpenID)

2009 年 7 月 27 日 tdtsh Comments off
カテゴリー: OpenID, java タグ:

bookmarks 2009-07-25

2009 年 7 月 25 日 tdtsh Comments off
カテゴリー: OpenID タグ:

bookmarks 2009-06-04

2009 年 6 月 4 日 tdtsh Comments off

@IT 第5回 OpenIDを実装したソースコードを読もう

http://www.atmarkit.co.jp/fcoding/articles/reading/05/reading05a.html

@IT OpenIDの仕様と技術 Index

http://www.atmarkit.co.jp/fsecurity/index/index_openid.html

@IT OpenIDの仕様と技術 第2回 あなたのサイトをOpenID対応にしている2行の意味

http://www.atmarkit.co.jp/fsecurity/rensai/openid02/openid01.html

これらを集中管理できる。コミュニティサイトでは、これで充分か?

ニックネーム

メールアドレス

フルネーム

誕生日

性別

郵便番号

言語

タイムゾーン

@IT OpenIDの仕様と技術 第4回 OpenIDをとりまくセキュリティ上の脅威とその対策

http://www.atmarkit.co.jp/fsecurity/rensai/openid04/openid01.html

OpenIDでもフィッシングの脅威は考えなくてはならない。

アカウント名もバレバレになるので、パスワードの強度強化が必要。

クラウド・セキュリティのベスト・プラクティス確立に向けて2団体が協力

http://www.computerworld.jp/topics/cloud/148049.html

L0phtcrack is Back!

http://isc.sans.org/diary.html?storyid=6496

Google App Engine for Javaを使ってみよう!(6)Mail Java API

http://codezine.jp/article/detail/3917

メルマガ配信などの大量配信は出来るのかな?

suz-lab LAMP環境用”CentOS AMI”

http://suz-lab.blogspot.com/2009/06/lampcentos-ami.html

カテゴリー: OpenID タグ: