OpenID登録の削除yahooの詐欺警告


何日もかけてOpenIDプロトコルを理解し、OpenID Consumerのプログラムを書いてテストしたとき、あなたのプログラムを使ってすべてのOpenIDが認証され、Yahooを除いてユーザーの属性を得ることができることを発見しましたか?のOpenID、しかもYahoo!次の警告も出ています.あなたはあなたのボスに説明します:他のアカウントはすべて認証することができて、Yahooだけあります!のアカウントはだめです.Yahoo!のサーバーに問題が発生しました.しばらくすればいいかもしれません.それからボスは満足して行って、あなたは頭の汗を拭いて、夜遅くまで残業して問題を探していったいどこにあるのかを探します.
Warning: This website has not confirmed its identity with Yahoo! and might be fraudulent. Do not share any personal information with this website unless you are certain it is legitimate.
私は責任を持ってあなたに教えることができます:これはYahooではありません!の問題は、あなたのプログラムに問題が発生したことです.
しかし、なぜ他のOpenIDが登録できるのでしょうか.他のOpenIDプロバイダが同時にOpenID 1をサポートするためである.1とOpenID 2.0契約だがYahoo!のプログラマーは私たちのように互換性の問題を考えるのが好きではありません.OpenID 2のみサポート.0プロトコル基準.
ではOpenID 2.0協定の基準には何か特別なところがありますか?
OpenID2.0ではOpenID Relying Party discoveryという新しいものが提案されていますが、私たちの問題はこのOpenID Relying Party discoveryにあります.
まず、このOpenID Relying Party discoveryが何なのか説明します.
OpenIDプロバイダサイトにリダイレクトして認証を要求すると、OpenIDプロバイダはOpenID Relying Party discoveryというメカニズムを使用してreturn_を自動的に検証します.toのURLが指定された範囲内であり、realmパラメータによってOPによって取得されたXRDSドキュメントから取得されたreturn_toのURLは同じです.
私はこのように理解しています:私のConsumerプログラムはOPに私のreturnを教えましたtoアドレスは何ですか.しかし、OPは私を信用していません.私のrealmパラメータ(注意:ここはOPからRPへのリクエストなので、realmパラメータのurlは外部ネットワークのipアドレスまたは外部のDNSで検索できるドメイン名でなければなりません)を通じてyadis協議に基づくXRDSドキュメントのreturn_を検索する必要があります.toアドレス、2つのreturn_to住所を比較して、同じなら、はい、私はあなたを信じて、放します.(このように理解して問題があるかどうかはわかりませんが、大丈夫だと思いますJ)
はい、原理は理解しました.次に私たちがしなければならないのは、
1 XRDSドキュメントを作成してあなたのウェブサイトに保存して、どんな拡張子に保存しても大丈夫ですが、Yahooや他のOPがこのドキュメントのContent-Typeを取得することを保証しなければなりません.「アプリケーション/xrds+xml」です.そうしないと、彼らはこのドキュメントが彼らが探しているドキュメントではないと思っています.
2あなたの最初のステップで作成したXRDSドキュメントのアドレスをあなたのサイトのトップページ、またはopenidに公開します.realmパラメータ指定ページ(推奨)
まず、XRDSドキュメントを作成します:(xrds.jspと名付けます)
<%response.setContentType("application/xrds+xml");%>
<?xml version="1.0" encoding="UTF-8"?> 
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)">
	<XRD>
		<Service xmlns="xri://$xrd*($v*2.0)">
			<Type>http://specs.openid.net/auth/2.0/return_to</Type>
			<URI>http://xxx.xxx.xxx.xxx/openid_returnurl.jsp</URI>
		</Service>
	</XRD>
</xrds:XRDS>

 
あるいはあなたもそうすることができます.
<%@page import="java.io.PrintWriter"%>
<%
	response.setContentType("application/xrds+xml");
	String xrd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <xrds:XRDS xmlns:xrds=\"xri://$xrds\" xmlns:openid=\"http://openid.net/xmlns/1.0\" xmlns=\"xri://$xrd*($v*2.0)\">
" + "<XRD>
" + "<Service xmlns=\"xri://$xrd*($v*2.0)\">
" + "<Type>http://specs.openid.net/auth/2.0/return_to</Type>
" + "<URI>http://uop.wecoo.com/home/openid_returnurl.jsp?login=true</URI>
" + "</Service>
" + "</XRD>
" + "</xrds:XRDS>"; PrintWriter writer = response.getWriter(); writer.write(xrd); %>

 
あなたの任務はURIラベルのURLをあなたのreturnに変更することです.url
では、第2のステップ:(あなたが作成したXRDSドキュメントのアドレスをopenid.realmで指定したページまたはトップページに公開し、単独でページメンテナンスを書いてopenid.realmパラメータを設定して作成したページをお勧めします)
作成したページ(realm.jsp)には、次のコードが記述されています.
<%response.setHeader("X-XRDS-Location","http:// xxx.xxx.xxx.xxx/xrds.jsp");%>
<html>
	<head>
		<meta http-equiv="X-XRDS-Location" content="http://xxx.xxx.xxx.xxx/xrds.jsp"/>
	</head>
</html>

 
つまりresponseのヘッダを設定するか、ラベルにmetaを設定します.パラメータ名はX-XRDS-Locationパラメータ値がxrdsドキュメントのアドレスである必要があります.ここに二重保険を設置します.Yahooはを知らないので、他のサイトがresponse headerを知らないことは保証できません.
認証にリダイレクトする前にopenid.realmの値はauthReqに設定.set("openid.realm","http://xxx.xxx.xxx.xxx/realm.jsp");
注意:X-XRDS-Locationを他のページに設定する場合、このページで唯一リダイレクトできないことに注意してください.そうしないと、OpenIDサービスプロバイダはXRDSドキュメントを取得できません.これ、そんなに苦労してやったのはやっていないに等しいので、単独でホームページを作ることをお勧めします.
さあ、詐欺警告のヒントがあるかどうか試してみましょう.まだあるって言わないでよ、ほほほ.しかし、問題はまた来て、警告はありませんが、ユーザーの属性を取得できません.なぜですか.Yahoo!のこの机能はまだテスト期间で、今Plaxo、Jyteの2つのウェブサイトだけがこの机能を使うことができて、だからしばらくこのものを考えないで、家に帰りましょう、この残业のためではありません.