devdev blog

なにかウェブサービスを作りたい

OAuthやOpenIDでソーシャルログインするには

ウェブサービスを作るとき、その都度ユーザー管理(新規登録、パスワード再発行等々)を作るのは面倒です。そこでソーシャルメディア等が提供する外部認証サービスを利用するのがもはや一般的です。その仕組みとして思い当たるのは、OpenIDやOAuthとかではないでしょうか。

OpenIDってなんだろう

OpenID や OAuth の役割と、既存のシングル・サインオンとの違い

一方で OpenID と OAuth は、対象とする領域が、かなり意図的に絞り込まれた形でスタートして います。OpenID は、繰り返し、こう説明されています。 『Identity authentication not authorization』

仕様から学ぶOpenIDのキホン (2/3)

OpenID AuthenticationはEnd Userが所有するIdentity URLを証明する手段を提供します。

つまり「エンドユーザーが主張するID(=URL)が、確かにその人が所有するものである(=認証)」と保証するのが、Identity Providerで、これらの仕組がOpenIDです。そして、それ以外の機能は提供しない事がポイントです。 一方、

OAuthってなんだろ

OpenID や OAuth の役割と、既存のシングル・サインオンとの違い

一方の、OAuthについては、Pat Pattersonさんが上記のプレゼン中で、このように表現しています。 『Authorization rather than Authentication』 『認証というよりは、認可』

OAuthが提供する仕組みは、認証(ID等がその人の物であるという証明)ではなく、第三者に対してエンドユーザーの権限を与える仕組みです。

例えば、普通はFacebookへ投稿できるのは本人のみですが、とあるサービスが本人に代わってFacebookに投稿したい時には、OAuthで本人に投稿許可を尋ねる事ができます。

現在、OAuth 1.0, OAuth 2.0とあるが、最新かつ良く使われているのはOAuth 2.0みたいで、1.0を使う理由は特にないようです。

OAuthで認証はできるのか

ってことは、OAuthは認証には使えないのかなと思いますが、世の中OAuthで認証ぽい事をしているがよくあります。これはOAuth認証と呼ばれているようです。OAuthで認証する方法を調べてみると、、

なんか出来そうなんですが、使い方間違えると死ねるようです。なんか怖いですね。

ここで、「Implicit Flow」(Implicit Grant Flow)というワードが出てきました。さらに、この問題を解決するには「OpenID Connect使え」と言っています。

再び、OpenIDって

OpenIDについて調べが足りなかったようです。OpenID - Wikipediaによると、

などがあるようです。

OpenID Authentication 2.0は、いわゆるOpenID認証のことですね。

OpenID Connectは、次世代の認証システムのようです。HTTP上で使用する場合は、OAuth 2.0の仕組みの上で認証を行う仕組みのようです。

まとめ

OAuthを単純に認証に使った場合の危険性やメカニズムについてはまだあまり理解してませんが、どうやらOpenID Connectを使えば、ソーシャルなサービスを利用して安全に認証ができそうなことがわかってきました。

引き続きOAuth 2.0、OpenID Connectについて調べて行きたいと思います。