2012年12月21日

OpenID/OAuth

YConnect(OAuth2.0/OpenID Connect)をリリースしました!

  • このエントリーをはてなブックマークに追加
こんにちは!IDサービスの河内です。
先日OAuth2.0に準拠し、OpenID Connectをサポートした新しい認証認可プロトコルをリリースしました。その名もYConnect!
今日はYConnectの簡単な紹介をしていきます。
仕様に関するドキュメントは下記にまとめてあります。

YConnectとOAuth1.0違い

YConnectとOAuth1.0の大きな違いは下記のものがあります。

  • 署名が不要
    OAuth1.0では複雑な署名が全てのリクエストで必須となっており、開発難易度が高かったため実装に苦しめられるエンジニアが続出していました。
    YConnectでは全てのAPIをhttps化することで署名を省くことができ、簡単に実装することができるようになりました。
  • ユーザー認証に利用可能
    OAuth2.0を開発するにあたり、ID連携の質を高めるためOpenID Connectも同時サポートしました。先行して開発を行っていたため、現在の仕様と一部異なる部分があります。
    OpenID ConnectはIdentity Provider(YConnectの場合はYahoo! JAPAN)とアプリケーション間で認証情報をトークンとして連携できるプロトコルです。OAuth2.0の仕様をベースとすることで「認証」と「認可」をスムーズに実現し、多くのユースケースに対応できる仕組みとして考えられています。
    YConnectには「IDトークン」といったユーザー認証情報を含む改ざん検知用の署名付きトークンを返却することができます。
    従来のOAuthではアクセストークンが発行されたことを認証成功と判断しID連携を行ってきましたが、アクセストークンの置き換え攻撃をされても検知することができませんでした。そこでIDトークンで発行元、発行先、nonce値のチェックを行うことで初めて正しくユーザー認証できたとみなすことができます。
  • 様々なユースケースに対応
    OAuth1.0はウェブアプリケーションのみで、アプリケーションへの組み込みには適していなかったのですが、YConnectでは下記のようなユースケースに対応しています。
    • ウェブサーバーアプリケーション
    • ネイティブアプリケーション
    • ブラウザーベースアプリケーション
    • デスクトップアプリケーション
    ユースケースによって適した認可フローが定義されているため、用途によって使い分けることが可能となっています。例えば、ブラウザー上でのみ動作するアプリケーションやユーザーの端末で実行されるアプリケーションの場合、ユーザーの同意の結果としてアクセストークンを取得できるフロー(Implicit Grant)が利用できます。ただしクライアント上で取得するため、リフレッシュトークンは発行されません。
  • 認証要求や出力するテンプレートを制御できる
    ログイン画面や同意画面の出力をアプリケーション側で制御することが可能になりました。
    また出力するテンプレートの種類をPC用、スマホ用、フィーチャーフォン用(近日対応予定)とアプリケーション側でコントロールすることができます。

サポート認可フロー

OAuth2.0で定義されている認可フローは4種類あり、YConnectでは以下の2種類を一般開発者向けに公開しています。

  • Authorization Code Grant
  • Implicit Grant

「Resource Owner Password Credentials Grant」はユーザー名/パスワードをユーザーがアプリケーションへ渡し、アプリケーションから直接Identity Providerへ送信される仕組みになります。アプリケーション側にユーザーのクレデンシャルが渡ってしまうため、Yahoo! JAPANとしてはサポートはしていますが特殊なケースでのみの利用としています。
ですので一般公開は行っていません。
また、「Client Credential Grant」は現在はサポートしていませんが、今後2-legged認証として検討していきます。

アプリケーションの種類

クライアントが登録できるYConnectのアプリケーションの種類は「サーバーサイド」と「クライアントサイド」の2種類あります。
「サーバーサイド」はウェブサービスやバックエンドのサーバー上で動作するようなネイティブアプリを指し、「クライアントサイド」はクライアント上で動作するようなネイティブアプリやブラウザーアプリを指します。
サーバーサイドのアプリにはsecretを発行し、Basic認証にてクライアント認証を行います。対して、クライアントサイドのアプリはデバイス上にアプリケーションのクレデンシャルを保存する必要があるため、クライアント認証は行いません。事前登録してあるコールバックURLをリクエストし、有効性の確認をすることで他のアプリケーションにクレデンシャルを発行することを防いでいます。

アプリケーションの種類の図解

ユーザーの属性情報も取得できる!

YConnectではユーザーの属性情報を取得できるAPIを公開しています。取得したい属性情報はアプリケーション側でリクエスト時のscopeパラメータで指定することが可能で、ユーザーが同意することで指定した属性情報を取得できます。
これを利用してID連携の際の初期登録のフォームへプリセットしたり、アプリケーション側で性別や年齢別に最適化されたページを表示することが可能になります。
取得できる情報はこちらのレスポンスの表を参照ください。

終わりに

Yahoo! JAPANのAPIを使ってアプリを作りたい!ログイン機能を簡単に実装したい!Yahoo! JAPAN IDと連携したい!といった考えをお持ちの方、ぜひYConnectを利用してみてください!
興味を持った方は下記のドキュメントもご覧ください。

http://developer.yahoo.co.jp/yconnect/

また、簡単に実装できるようにSDKも用意しております。ダウンロードしてお使いください。
今後もブログにてYConnectの紹介を続けていきます。
次回は「YConnect SDK」について説明したいと思います。

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加