アーカイブ

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

GAE/J で OpenID をやってみる(appengine java sdk 1.3.4以降)

2011 年 6 月 23 日 tdtsh Comments off

去年の9月頃からGoogle App Engine for JavaでのOpenIDについて調べ出して、dyuprojectでやってみたりもしましたが、SDK 1.3.4以降はOpenIDに対応しています。

当ブログは泣かず飛ばずだけど、GAE/JとOpenIDに関してはソコソコ検索エンジンで上位に入っちゃうんで、特に困ってなかったけど折角用意されているんだし、今更ながらやってみます。

コチラの通りにやればGAE/J + Slim3でログイン出来る用になります。
まずはGAE/J+slim3でOpenID、そしてOpenID認証とTwitter認証両方に対応してみる – xfanの日記

概要としては、

Google App Engineの管理画面で設定をして、

web.xmlで要ログインURLとかを定義して、

/_ah/login_required/に対応するサーブレットを作って、
(slim3のコントローラでは無く extend HttpServletなん)

ログイン用のjsp (slim3のコントローラでも可)を作って

OP(OpenID Provider)にリダイレクトするコントローラを作ればOK。

ログアウトとか、足りない部分はあとはココを見ながら。
Using Federated Authentication via OpenID in Google App Engine

App Engine 1.3.4 のOpenID 認証 – hidemonの日記

Google App EngineでOpenID OAuth Hybrid – 後ろ回しゲロ
元、失業SEの開発日誌: GAE/J の OpenID を使ってみた。

OpenID認証によるシングルサインオン – GeekFactory

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

openid4java で OpenID OP のサンプルを動かしてみる

2011 年 3 月 17 日 tdtsh Comments off

openid4javaのサンプルを動かしてみる

事前にJDKとmeven2のインストールが必要です。

openid4javaDownloadsから、[openid4java-full-0.9.5.593.tar.gz]をダウンロードし、C:\
にでも解凍する。

CMD.exe を起動し以下を実行。

cd c:\openid4java-full-0.9.5.593\samples\simple-openid
mvn jetty:run

http://localhost:8080/simple-openid

をブラウズすると、OpenID RPのテストが出来ます。Yahoo OpenID なり mixiIDなりで試します。

OpenID プロバイダを試すには、上記URLにて、これ


http://localhost:8080/simple-openid/user.jsp

を入力します。

次回はコレを参考に、OpenID プロバイダを作ってみようと思います。

 

参考サイト

Java Web アプリケーションのための OpenID: 第1回 / IBM

Java Web アプリケーションのための OpenID: 第2回 / IBM

WinstoneでOpenID4Java – 不悔必省

カテゴリー: OpenID, java, web, ソーシャルメディア タグ:

ヘッダにOGP (Open Graph Protocol)を入れてmixiやFacebookやGREEで試す

2011 年 2 月 4 日 tdtsh Comments off

OGP情報ヘッダに入れてますか?

要は、Facebook likeとかmixiチェックとかをWEBサイトに導入するとき、Open Graph Protocolに従い、HTMLヘッダのmetaタグ書きましょう、と言う事です。

フェイスブック、ミクシィ、グリーで使われている OGP (Open Graph Protocol) とは何か – IT戦記

当ブログはwordpressのプラグインに全てお任せで入れてませんけど、他でmixiチェック、GREEイイね、Facebook likeで色々実験してみました。

さっとググッてさっと実験しただけなんで、誤りを含んでいる可能性が大いにあります。鵜呑みにしないでください。
誤りを見つけた方はご指摘ください。

 


HTMLタグは、こんな感じに。

<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ja” lang=”ja” xmlns:og=”http://opengraphprotocol.org/schema/” xmlns:gr=”http://gree.jp/ns” xmlns:fb=”http://www.facebook.com/2008/fbml” xmlns:mixi=”http://mixi-platform.com/ns#”>

裏取り無し、純粋コピペだけでつくりました。
まぁ動いたんで大きくは間違ってないんでしょう。

 


	<meta property="og:type" content="blog">

コレ、何を入れたらイイのか良く判りません。ググってみると、サンプルコードは”blog”となっている事が多いです。

調べてみました。

Use article for any URL that represents transient content – such as a news article, blog post, photo, video, etc. Do not use website for this purpose. website and blog are designed to represent an entire site, an og:type tag with types website or blog should usually only appear on the root of a domain.
Object types / Open Graph protocol – Facebook developpers

どうやら、ブログやSNSとかCMSとかの個々の記事には、”article”を使うのが正解の様です。

“website”や”blog”は、そのサイトのトップやDocumentRootのページに設定して、そのサイトそのものを表現する時に使うのが正しい作法の様です。
多分。

 


<meta property=”og:title” content=”ココにタイトルを入れる”>

これは各社共通で、イイね的な投稿の本文的なものになります。

コレを入れとかないと、サイト名になったり、ブラウザタイトルが入ったりと、マチマチの様です。

誤解を恐れずにいうと、ココをイイ感じに引きのあるタイトルにする事がOGPを導入する最大のメリットなんで、がんばって設定しましょう。

 


<meta property=”og:image” content=”http://www.your.site/path/to/image.gif”>

これはOGPの必須項目になっているんで最初はWEBサイトのロゴ画像を設定してたんですが、mixiチェックでこの画像が自動で挿入されてしまいます。

個々の記事のチェックなのにサイトのロゴが入るのはうまくないですね。

入れないでも、一応mixiとGREEとfacebookはちゃんとイイね的な事ができました。

因みにmixiは、その記事のページをクロールして画像を探し出し、mixiチェックボタンを押下した時に選択させる、と言う仕様になっています。

それが嫌な場合は、こう書けばやめてくれました。

	<meta name="mixi-check-robots" CONTENT="noimage">

Open Graph protocolの画像クロールについて – web探検隊

 


Facebookのlikeの場合、

	<meta property="fb:admins" content="FacebookアカウントのID" />

の様なんが必要です。

このやり方でいくと、個々のページをイイねされる度にファンサイトが増えていくんです。

こう書いた方がいいです。

	<meta property="fb:app_id" content="FaceookアプリのID" />

それには、Facebookアプリを作る必要があります。

*** fb:admins の代わりに fb:app_id を使う
fb:admins を使って、手動でお知らせを流すことが出来るのは良い機能なのですが、一つのサイトにたくさんのウェブページがあって、たくさんの「いいね!」があった場合は一個一個のページに対して管理していくのは大変ですね。
そんな場合は、 fb:admins の代わりに fb:app_id を使うことで、プログラムからそれらの作業を自動化することが出来ます。
やり方としては、以下のページからお知らせ専用のフェイスブックアプリを作ります。
[http://www.facebook.com/developers/createapp.php:title

アプリといっても、要は自分のFacebookアカウントの様に、Facebook上に基本データとウォールを持ったオブジェクトをもう一つ登録するイメージです。アプリの実体はあなたのサイトと言う理屈です。

とりあえず作るのは簡単でした。
色々と良く判らない部分がまだありますけど、Facebookでイイねは出来てました。

その他参考にさせて頂いた記事たち

ライブドアブログ( @livedoorblog )にOGP (Open Graph Protocol) を組み込んでFacebookで体験してみた件とライブドアブログへの要望

【Facebook】Open Graph Protocol 説明:プロジェクトマネジメント10.0:ITmedia オルタナティブ・ブログ

カテゴリー: OAuth, OpenID, web, ソーシャルメディア タグ:

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, クラウド タグ: