<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>openid / Drkcore</title><link>http://blog.kzfmix.com/openid</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Thu, 01 Mar 2012 21:49:48 +0919</lastBuildDate><item><title>ExpressでOpenID認証</title><link>http://blog.kzfmix.com/entry/1330605148</link><description>&lt;p&gt;イントラに&lt;a href="http://blog.kzfmix.com/entry/1327018148"&gt;OpenIDを入れた&lt;/a&gt;ので認証のことを考えなくてもよくなって快適なので、色々作っている。&lt;/p&gt;
&lt;p&gt;ちょっとsocket.ioを使いたかったので、Expressでopenid認証させるサンプルを書いてみた。&lt;a href="https://github.com/havard/node-openid"&gt;node-openid&lt;/a&gt;を使っている。&lt;a href="http://www.openid.ne.jp/"&gt;openid.ne.jp&lt;/a&gt;のID使って試してある。mixi-openidは動かなかったし、facebookとgoogleのopenidはドキュメントの場所がよくわからなくてイラッと来てやめた。&lt;/p&gt;
&lt;h3&gt;app.coffee&lt;/h3&gt;
&lt;p&gt;authenticateっていうパスにアクセスするとopen-id認証してverifyにリダイレクトされてくるようになっている。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;express = &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;express&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;routes = &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;./routes&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;openid = &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;openid&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;url = &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;querystring = &lt;/span&gt;&lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;querystring&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;relyingParty = &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;openid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RelyingParty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;&amp;#39;http://localhost:3000/verify&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,[])&lt;/span&gt;

&lt;span class="nv"&gt;app = module.exports = &lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configure&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;views&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;__dirname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/views&amp;quot;&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;view engine&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;jade&amp;quot;&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bodyParser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;methodOverride&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;router&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;static&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/public&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configure&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;development&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nv"&gt;dumpExceptions: &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nv"&gt;showStack: &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configure&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;production&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errorHandler&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/authenticate&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(req, res) -&amp;gt;&lt;/span&gt;
  &lt;span class="nv"&gt;identifier = &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openid_identifier&lt;/span&gt;
  &lt;span class="nx"&gt;relyingParty&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticate&lt;/span&gt; &lt;span class="nx"&gt;identifier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(error, authUrl) -&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Authentication failed: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;unless&lt;/span&gt; &lt;span class="nx"&gt;authUrl&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeHead&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Authentication failed&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;get&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/verify&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(req, res) -&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;relyingParty&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verifyAssertion&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(error, result) -&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authenticated&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Success :)&amp;#39;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Failure :(&amp;#39;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Express server listening on port %d in %s mode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;view/index.jade&lt;/h3&gt;
&lt;p&gt;formを追加しただけ&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;
&lt;span class="nt"&gt;p&lt;/span&gt; Welcome to &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;form&lt;/span&gt;(&lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;get&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/authenticate&amp;quot;&lt;/span&gt;)
  &lt;span class="nt"&gt;p&lt;/span&gt; Login using OpenID
  &lt;span class="nt"&gt;input&lt;/span&gt;(&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;openid_identifier&amp;quot;&lt;/span&gt;)
  &lt;span class="nt"&gt;input&lt;/span&gt;(&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Login&amp;quot;&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;イラッと来るのはsnow leopardにあげたらmacがやたらと重くなった部分も多い。さすがに&lt;a href="http://blog.kzfmix.com/entry/1209477921"&gt;4年も経つ&lt;/a&gt;のでそろそろ買い換えてもいいかなと思ったりするところではある。&lt;/p&gt;</description><pubDate>Thu, 01 Mar 2012 21:49:48 +0919</pubDate><category>openid</category><category>Node.js</category><category>Express</category></item><item><title>iddyってOpenID対応しないの?</title><link>http://blog.kzfmix.com/entry/1220770659</link><description>&lt;p&gt;&lt;a href="http://iddy.jp/"&gt;iddy&lt;/a&gt;みたいなprofileサービスはOpenID対応してほしいなぁとか思う。&lt;/p&gt;
</description><pubDate>Sun, 07 Sep 2008 15:57:46 +0919</pubDate><category>openid</category></item><item><title>openidが気になったので調べてみた</title><link>http://blog.kzfmix.com/entry/1206282242</link><description>&lt;p&gt;突然、無性に気になって仕方がなくなったので。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.atmarkit.co.jp/fsecurity/index/index_openid.html"&gt;OpenIDの仕様と技術&lt;/a&gt;を一通り読んだ。連載は分かりやすかったが、 第5回がちょっと理解できていないのであとでもう一度。あと、自分で実装してみないと本当に分かったんだか、分かったつもりになってるだけなのか分からないよねってことで、このblogのurlを&lt;a href="http://www.goodpic.com/mt/archives2/2007/04/openid_2.html"&gt;voxにdelegate&lt;/a&gt;するようにしてみた。&lt;/p&gt;

&lt;p&gt;で、bloggerにテストコメントしてみた&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kzfmix.com/images/blog/openidtest.png" alt="openid_test" title="" /&gt;&lt;/p&gt;

&lt;p&gt;上が、kzfm.vox.comで下がblog.kzfmix.com。なんかユーザー名がblogとなっていて気持ち悪い。yahooのopenidだと長い文字列の羅列でさらにアレな感じが漂っていた。&lt;/p&gt;

&lt;p&gt;そしてdrkcoreも&lt;a href="http://search.cpan.org/perldoc?Catalyst::Plugin::Authentication::Credential::OpenID"&gt;Catalyst::Plugin::Authentication::Credential::OpenID&lt;/a&gt;を入れてopenidでコメントできるようにいじる。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;ところで、openidってのは、urlに人格っていうかヒトっぽいものの個性みたいのがくっついてるから面白いのかなーなんて思うのですよ。だからイントラでの使用ってのはちょっと想像しにくいですな。例えば顔もあわせたことのない巨大な企業とかで、大多数がイントラブログを書いてる状況とかだと有効なのかななんて思うのだけど。そういう認識でいいのだろうか。&lt;/p&gt;

&lt;p&gt;それから、研究シーンとかだと、論文業績を個人ごとに集めたurlをpubmedなり出版社なりがopenidにしといたうえで、ヒトの論文にコメントできるようなサービスを構築すればいいのにと思ったり。結局もうちっとパブリックな査読のシステムとか必要なんじゃないの？とか思うことが多かったりとかするし。&lt;/p&gt;

&lt;p&gt;雑誌にIFつけるんじゃなくて個々の論文に対するIFみたいなものつけないと駄目だよねとか思っているので、コメントする側のバックグラウンドとかはっきりしてれば、なんか面白そうな気がするけどねー。&lt;/p&gt;
</description><pubDate>Mon, 24 Mar 2008 00:16:50 +0919</pubDate><category>drkcore</category><category>openid</category></item></channel></rss>