• ベストアンサー

シングルサインオンとOpenID

"OAuth"の場合にも、 "OpenID( http://thinkit.co.jp/article/120/4/ )"が利用されているそうですが、 同一のユーザーがアクセスを試みました際には、 紐付けられた各サイトが同じ認証サーバーのURLを参照するのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hymat
  • ベストアンサー率58% (95/162)
回答No.1

OAuthは暗黙の内に別の認証サーバーにアクセスしてトークンを受け取ります。このトークンをもってログインを完了させます。OpenIDは提携する各サイトのユーザーをログインさせます。 認証という同じ機能ではありますが、別の仕掛けなので、OAuthとOpenIDは共存可能です。ログイン時にはサイト内で自動的に2段階の処理が行なわれることになります。 一般にOAuthの認証サーバーは各サイトが独自に持っているので、OpenIDとは別のサーバーになります。逆に、OpenIDのサーバー自体がOAuth方式になっているようです。 どのサイトにログインしても、OpenID対応のサイト同士ならば、サイトの背後で同じOpenID認証サーバーが参照されるでしょう(実際は複数台に分散されているでしょうが)。また、異なるサイトで同じOAuthによる機能(Twitter等)を利用した場合も同じOAuth認証サーバーが参照されるでしょう。

SakuraiMisato
質問者

補足

有り難う御座います。 よく分かり、助かりました。

関連するQ&A

  • OpenIDのユーザー識別について

    OpenIDは「ひとつのIDですべてのサイトにログインできる」と言われていますがいくつか疑問があります。 例えばYahooのIDでログインをする場合、OpenIDに対応しているサイト(=Aサイトとします)はOpenIDを通じてYahooの方から「ニックネーム」「性別」「年齢」「メールアドレス」を取得したとします。 多くのOpenIDではパスワードなどのやりとりはないと思うのですが、 (1)結局Aサイトでユーザーはパスワードを新たに決める必要があるのではないでしょうか?   そうなるとおのおののサイトでやはりパスワードが必要になるため「ひとつのIDでログインできる というより会員登録する項目が減った」だけというイメージなのですが・・・ (2)OpenIDはつまるところ何によってユーザー判定をしているのでしょうか?  ソースを見たところAサイトでOpenIDでログインすると上記のニックネームなどをSESSIONなどで以て返ってきていると思うのですがどの部分をパスワード替りに代用しているのでしょうか? Yahooの場合、各ユーザーごとに「あなたのOpenIDは https://me.yahoo.co.jp/a/adcdefgbuY3uOFUhijkltd124345-  といった識別乱数のようなものもありますがこれをパスワード替わりにAサイトでは認識しているのでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • シングルサインオンの方法

    レンタルサーバを使用しているサイト:Aから、社内構築サーバを使用しているサイト:Bに遷移するようにしたいと思っています。 その際、サイト:Aでログインしていない場合は、ログインエラーとして、サイトBを参照できないようにしたいと思っていますが、何か方法がないでしょうか?? Aサイトでは、ログイン情報とクッキー情報をデータベースに格納し、各ページ遷移時に、クッキー情報を使用して、データベースにアクセスし、ログインを行ったかを確認しております。 サイト:Bでは、別データベースになるため、ログイン情報が共有できないため、困っております。

    • ベストアンサー
    • Perl
  • シングルサインオンのような仕組みを自作したい

    今度新しく作成するIE8ベースのイントラのWebシステムにおいて、 簡易なシングルサインオンのような仕組みを実装したいと考えております。 <機器構成> ・仮想デスクトップサーバ ・Webサーバ ・APサーバ ・DBサーバ(Oracle 10g) 現在考えている大まかな流れは以下の通りです。 1.各ユーザはWindows Server 2008 R2の仮想デスクトップサーバにドメインアカウントでログオンする。 2.仮想デスクトップからIE8を使用してWebサーバ(htmlファイル)にアクセスする。 3.Webサーバ(htmlファイル)へのアクセスを契機に、仮想デスクトップにログオンしている  アカウント情報を取得(%username%などの環境変数から取得?)してWebサーバに返す。 4.Webサーバから、APサーバ経由でDBサーバのユーザマスターテーブルを参照して  仮想デスクトップから取得したアカウント情報を検索(マッチング)する。 5.マッチすれば正当なユーザ認めてWebシステムに自動ログオンして画面が開く。  マッチしなければ接続できず、ポップアップもしくはIE上でエラーメッセージを表示する。 私はWebシステムの開発をするのが初めてで、具体的にどのような技術を使用すれば 上記の仕組みを実現できるのかが全然イメージできておりません。 例えば… ・上記3でWebサーバから仮想デスクトップのアカウント情報を取得する際、  一般的にはどのような方法を使用するものでしょうか?  的外れかもしれませんが、私が想定しているようにWebサーバへのアクセスを契機にした場合、  html内でユーザが操作しなくても自動的に処理(バッチ実行など)を行う仕組みが必要になると  考えているのですが、htmlでそのような処理を行うことは可能でしょうか?   ・仮想デスクトップにログオンしているアカウント情報を取得した後、その情報を  Web、AP、DBサーバに渡す場合はどのような方法を使用するべきでしょうか?  接続時のhttpの記載にアカウント情報を埋め込む…というのは偽装の恐れがあるので  できれば避けたいと考えております。  ユーザには見えないログオンID入力画面をに内部的に用意し、採取したアカウント情報を  自動入力するような作りにする必要があるのか、もしくは別の方法(ID入力画面を用意しない)で  実現することは可能でしょうか? 何か基本的な考え方だけでもアドバイスを頂ければと思い投稿致しました。 初めての投稿なのでいろいろと不備があるかと思いますが、何卒よろしくお願い致します。

  • RubyでのOpenIDについての問い合わせ

    RubyOnRailsにてOpenIDのライブラリを試しているのですが 付属して来たサンプルを移植しても上手く動作せずに困っています。 環境はWindows7環境でRailsのバージョンは3.0.9 gemコマンドでruby-openidライブラリの2.1.8のバージョンを取得して来て そのサンプルとして付属して来たOP(OpenID Provider)を移植しました。 この際、rack-openidと言うライブラリも取得しております。 RP(Relying Party)の方も同様にネット上の情報を参考にサンプルアプリを作成し ログインシーケンスの動きを確認してみようとしている状況です。 ところが、ログインしようとしてRPのログイン画面からOPのServerの画面にリダイレクトする タイミングで、エラーが発生してしまいます。 調べてみたところ、リダイレクトする際のGETクエリーのパラメータ値が上手く OPのServerの処理に引き継ぎ出来て居ませんでした。 値自体はURLの後にキチンと付加されているので疑問に思い 更に調べてみたのですが、如何もrack-openidライブラリのRack::OpenIDクラスが行っている sanitize_query_stringと言うパラメータ値の無害化(サニタイズ)処理で query_hash = env["rack.request.query_hash"] query_hash.delete("_method") query_hash.delete_if do |key, value| key =~ /^openid\./ end とかやっていまして、 openid関係の値をクリアしている様子 結果として全てのパラメータをクリアしてしまっている様です。 確かに全部クリアしてしまえば無害でしょうけれど、これでは動作に問題が出ると思われる状況です。 そこで、この処理の妥当性をしかるべき相手に問い合わせしたいのですが プロジェクトホームページを見ても、開発者の名前と思われる情報は判るのですが 問い合わせする方法が判らず困っています。 どなたか問い合わせ方法をご存知であれば、教えて頂きたいです。 宜しくお願いします。

    • ベストアンサー
    • Ruby
  • Windowsクライアントからシングルサインオン

    お世話になっております。 諸先輩方のお知恵をお借りしたく、投稿させていただきます。 長文となりますが、よろしくお願いいたします。 ネットから情報収集し、自分なりに試行錯誤しながら色々とやってみてはいるものの、 思い通りの動作にならず困っております。 【やりたいこと】 Sambaを利用してLinuxサーバ(Apache)をActive Directoryに参加させ、 Windows統合認証(NTLM認証:mod_auth_ntlm_winbind)を利用して Windowsクライアントからシングルサインオンさせたい。 【環境】 ・DC(Active Directory)  OS:Windows Server 2003 Enterprise Edition SP2  コンピュータ名:adserver  ドメイン:hoge.local  ユーザー:ドメイン「hoge.local」の直下に、ユーザー「hogeuser」が存在する。  IPアドレス:xxx.xxx.xxx.xxx ・Linuxサーバ  OS:Asianux Server3 SP3  Sambaバージョン:3.0.33  Apacheバージョン:2.2.3  コンピューター名:adclient  ⇒ADの「Computers」の中に表示されているので、ドメインに参加できていると思われます。  IPアドレス:yyy.yyy.yyy.yyy ・クライアントマシンその1("C1"と略します。)  OS:Windows 7 Professional  ブラウザ:IE8  ドメイン参加:hoge.local(←今回の検証のために作成したドメイン)に参加済み。  ⇒コマンドプロンプトで「whoami /fqdn」と打つと「CN=hogeuser,DC=hoge,DC=local」が   返ってきます。  コンピューター名:test-pc  ⇒ADの「Computers」の中に表示されているので、ドメインに参加できていると思われます。 ・クライアントマシンその2("C2"と略します。)  OS:Windows XP SP3  ブラウザ:IE8  ドメイン参加:xxnet.com(←社内のドメイン)に参加済み。 DC⇔C1間、及びLinuxサーバ⇔C1間の疎通は問題ありません(双方向でのPingは通っています)。 【各種設定ファイル情報】 ・/etc/samba/smb.conf ※修正を加えた部分のみ抜粋。  [global]  workgroup = HOGE  security = ads  passdb backend = tdbsam  realm = HOGE.LOCAL  password server = hoge.local  encrypt passwords = true  idmap uid = 10000-20000  idmap gid = 10000-20000  winbind use default domain = yes  winbind cache time = 0  winbind separator = +  template homedir = /home/%U  template shell = /bin/false ・/etc/krb5.conf ※修正を加えた部分のみ抜粋。  [libdefaults]  default_realm = HOGE.LOCAL  [realms]  HOGE.LOCAL = {   kdc = xxx.xxx.xxx.xxx   admin_server = xxx.xxx.xxx.xxx   default_domain = hoge.local  }  [domain_realm]  .hoge.local = HOGE.LOCAL  hoge.local = HOGE.LOCAL ・/etc/hosts  127.0.0.1 localhost.localdomain localhost ←デフォルト(初期状態)のまま変更していない  ::1 localhost6.localdomain6 localhost6 ←デフォルト(初期状態)のまま変更していない  yyy.yyy.yyy.yyy adclient.hoge.local adclient ←この行だけを追加 ・/etc/resolv.conf  search hoge.local  nameserver xxx.xxx.xxx.xxx ・/etc/nsswitch.conf ※修正を加えた部分のみ抜粋。  passwd: files winbind  shadow: files winbind  group: files winbind ・/etc/httpd/conf/httpd.conf ※修正を加えた部分のみ抜粋。  KeepAlive On  LoadModule auth_ntlm_winbind_module modules/mod_auth_ntlm_winbind.so  Alias /ntlm/ "/var/www/html/ntlm/"  <Directory "/var/www/html/ntlm/">   NTLMAuth on   AuthType NTLM   AuthName "NTLM Authentication"   NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"   NTLMBasicAuthoritative on   require valid-user  </Directory> ・/var/cache/samba/winbindd_privileged のアクセス権  drwxr-x--- 2 root apache 4096 8月 13 10:58 winbindd_privileged 【現状】 Linuxサーバの/var/www/html/ntlm/の下に動作確認用の簡単なWebページ(index.html)を用意し、 C1から「http://yyy.yyy.yyy.yyy/ntlm/」(※1)にアクセスを試みると、 IDとパスワードの入力を促す認証ダイアログが表示されます。 認証ダイアログが表示されずに、ダイレクトでWebページを表示させたい (つまり、ドメインに参加したユーザのIDとパスワードでシングルサインオンさせたい) のですが、上述したように認証ダイアログが表示されてしまい、うまくいきません。 ここで、ドメインに登録されているユーザのID(hoge\hogeuser)とパスワード(※2)を 入力しても、何故かはじかれてしまいます。 ちなみに、C2(←hoge.localには参加していない)で同様の手順を踏むと、 認証ダイアログが表示されますが、その認証ダイアログに※2と同一の情報を入力すると、 用意したWebページが正しく表示されます。 以降、C2から※1に何度アクセスしても認証ダイアログが表示されずにWebページが 表示されるので、正しくシングルサインオンができていると思っております。 C2で一度ログオフ、その後再びログオンして再度※1にアクセスすると、 認証ダイアログが再び表示されました。 ⇒C2からのシングルサインオンの流れは特に問題無いと理解しています。 【疑問点】 (1)C1から※1にアクセスした際、何故認証ダイアログが表示されてしまうのでしょうか? (2)C1とC2において、何故動作が違うのか。  ⇒C2でWebページが表示できるのに対し、C1が表示できない点が腑に落ちません。 DC(Active Directory)の設定が悪いのか・・・ Linuxサーバーの設定が悪いのか・・・ はたまたクライアントマシン(もしくはブラウザ)の設定が悪いのか・・・ の絞り込みもできず、泥沼にはまっております。 お手数ですが、ご助言・アドバイス等いただきたく、よろしくお願い致します。 【備考】 その他の情報として、以下コマンドの実行結果も示しておきます。 # net ads info LDAP server: xxx.xxx.xxx.xxx LDAP server name: adserver.hoge.local Realm: HOGE.LOCAL Bind Path: dc=HOGE,dc=LOCAL LDAP port: 389 Server time: 月, 13 8月 2012 13:12:24 JST KDC server: DCのIPアドレス Server time offset: 0 # net ads testjoin Join is OK # wbinfo -t checking the trust secret via RPC calls succeeded

  • ツイッターのAPIでOAUTH認証を使用してのAPIリクエストについて

    ツイッターのAPIでOAUTH認証を使用してのAPIリクエストについて ツイッターのAPIを利用してアプリケーションを開発しています。 OAUTH認証でアクセストークンの取得まではできたのですが、 アクセストークンを使ってAPIにアクセスしたところページが 存在しないとの旨を伝えられました。 ↓実際のソース https://twitter.com/1/statuses/update.xml?in_reply_to_status_id=自分のID(アクセストークンで取得したもの)&oauth_consumer_key=OAUTHコンシューマキー&oauth_nonce=ランダム文字列&oauth_signature_method=HMAC-SHA1&oauth_timestamp=タイムスタンプ&oauth_token=アクセストークン&oauth_version=1.0&status=つぶやきたい内容&oauth_signature=署名 上記URLにheader()(リダイレクト)でアクセスしています。simplexml_load_file()や file_get_contents();だと何も取得できませんでした。 特に不安なのがin_reply_to_status_idの指定先と実際のリクエストの仕方が良く わからない事です。何とかして呟きたいのでご教示よろしくお願いいたします。

  • PHP+OAuthで認証エラー

    OAuth認証で、登録したAPIの認証「○○ががあなたのアカウントを利用することを許可しますか?」で ユーザ/PWを入力してログイン後、oauthライブラリを使用してOAuthオブジェクトを下記の様に作成したのですが。 $connection = new TwitterOAuth('CONSUMER_KEYの値', 'CONSUMER_SECRETの値'); $content = $connection->get('account/verify_credentials'); $connectionのhttp_codeリターンコードが'200'ではなくNULLになってしまい。 更に、$contentの内容に、"Could not authenticate you."という認証エラーが返ってきてしまいユーザ情報が取得できずにいます。 なぜ、認証エラーになってしまうのかが全く見当つかず。。 何か良い検証方法または、アドバイスありましたら教えてください。 参考サイトは http://www.sdn-project.net/labo/oauth.html http://blog.n-colo.net/archives/710 ちなみに、ライブラリのバージョンは0.2.0になります。

    • ベストアンサー
    • PHP
  • Basic認証のユーザーID、パスワードをURLに含める記述方法

    Basic認証がかかったサイトにアクセスする場合に、 ユーザーID、パスワードを入力するダイアログボックスを表示されずに直接アクセスがしたいです。 URLにユーザーID,パスワードを含める場合、 URLのどの部分にどのような記述で含めたらいいのでしょうか? よろしくお願い致します。

  • Ajaxでリファラは送れるの?

    ちょこっと不特定多数のWEBサイトを対象に こちらが準備したjsソースをブログやサイトに張り付けると サービスを受けれる というシステムを作っています そのサービスを受けるためにAjaxを利用し、サーバからデータを取得するのですが サーバに接続する際に どこのWEBページからアクセスしてきたかというデータはブラウザから送信されているのでしょうか? 不特定多数のサイトからのアクセスを考えているので 認証IDみたいなものではなく、アクセスしてきたURLを識別したいと思ってます

  • TwitterのOauth認証プログラムについて

    TwitterのOauth認証プログラムについて 現在、Oauth認証を使って、一般ユーザが認証確認後、 WEBから投稿できるシステムを作ろうとしています。 Oauth_TokenとOauth_Token_Secretは、 $tok = $to->getRequestToken(); で取得されたものを変数として保持して取得しようとしているのですが、 この2つの認証コードと、固有の consumer_keyとconsumer_secretを使用して 認証させ、投稿プログラム $req = $to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=> $tweet . " " . $url . " #" . $hash)); を実行させると、なぜか <?xml version="1.0" encoding="UTF-8" ?> - <hash> <request>/statuses/update.xml</request> <error>Could not authenticate you.</error> </hash> つまり、認証されてない状態になってしまいます。 Oauth_TokenとOauth_Token_Secretを取得している場所が間違っているのでしょうか? もしかしてこの2つのコードが逆だったのかもしれないと思い、 逆にして投稿してみたのですが、それでも同じエラー画面に飛んでしまいます。 なぜだか分かる方、いらっしゃいますか?

    • ベストアンサー
    • PHP