DoboWiki
Top
> .NETプログラミング研究/90 をテンプレートにして作成
.NETプログラミング研究/90 をテンプレートにして作成
開始行:
#title(OpenIDでログインできるサイトを作成する2)
#navi(.NETプログラミング研究)
#contents
*OpenIDでログインできるサイトを作成する2 [#v611a63b]
今回も前回に続いて、[[DotNetOpenId>http://code.google.com...
**OpenIdLoginの外観に関するプロパティ [#dc99f5cd]
OpenIdLoginは、デフォルトでは、文字や説明が英語で表示され...
OpenIdLoginコントロールの外観に関するプロパティを以下にま...
|名前|説明|h
|ButtonText|ログインボタンに表示する文字列。デフォルトは"...
|ButtonToolTip|ログインボタンのToolTipに表示する文字列。...
|ExampleUrl|テキストボックスに入力するOpenID URLのサンプ...
|ExamplePrefix|"ExampleUrl"の前に表示する文字列。"Example...
|LabelText|テクストボックスの左に表示する文字列。デフォル...
|RegisterText|OpenIDアカウントを作成するページへのリンク...
|RegisterToolTip|OpenIDアカウントを作成するページへのリン...
|RegisterUrl|OpenIDアカウントを作成するページへのリンクの...
|RegisterVisible|OpenIDアカウントを作成するページへのリン...
|RememberMe|"Remember me"チェックボックスにチェックを入れ...
|RememberMeText|"Remember me"チェックボックスに表示する文...
|RememberMeVisible|"Remember me"を表示するかどうか。デフ...
|ShowLogo|テキストボックスにOpenIDのロゴを表示するか。デ...
|RequiredText|テキストボックスになにも入力しないでログイ...
|UriFormatText|テキストボックスに正しくない形式の文字列が...
|UriValidatorEnabled|テキストボックスに正しくない形式の文...
|ValidationGroup|ボタンのValidationGroupプロパティに設定...
|IdSelectorIdentifier|[[ID Selector>https://www.idselecto...
|Columns|テキストボックスの幅。デフォルトは40。|
|CssClass|テキストボックスのCSSクラス。デフォルトは"openi...
**ユーザーの個人情報を要求する [#v98c69f2]
[[前号>../89]]の例で見たように、ChoixのログインではOpenID...
これらのプロパティにはDemandLevel列挙体の3つのメンバのう...
ただし、現時点ではSREGに対応していないOPが多いため、要求...
OPから返された個人情報は、OpenIdEventArgs.Responseプロパ...
OpenIdLoginコントロールの"Request"で始まるプロパティには...
|OpenIdLoginのプロパティ|説明|h
|RequestBirthDate|ユーザーの誕生日を取得するか(openid.sr...
|RequestCountry|ユーザーの国を取得するか(openid.sreg.cou...
|RequestEmail|ユーザーの電子メールアドレスを取得するか(o...
|RequestFullName|ユーザーのフルネームを取得するか(openid...
|RequestGender|ユーザーの性別を取得するか(openid.sreg.ge...
|RequestLanguage|ユーザーの言語を取得するか(openid.sreg....
|RequestNickname|ユーザーのニックネームを取得するか(open...
|RequestPostalCode|ユーザーの郵便番号を取得するか(openid...
|RequestTimeZone|ユーザーのタイムゾーンを取得するか(open...
個人情報の送信を要求したときは、PolicyUrlプロパティ(open...
次の例(login.aspx)では、OpenIDでログインするとき、メー...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
tagprefix="RP" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
'ログインしたとき
Protected Sub OpenIdLogin1_LoggedIn(ByVal sender As O...
ByVal e As OpenId...
'OPから返されたユーザーの個人情報を取得する
Dim claims As DotNetOpenId.Extensions.SimpleRegis...
e.Response.GetExtension( _
Of DotNetOpenId.Extensions.SimpleRegistra...
'メールアドレスと言語を覚えておく
Session("Email") = claims.Email
Session("Language") = claims.Language
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
RequestEmail="Require"
RequestLanguage="Request"
PolicyUrl="~/PrivacyPolicy.aspx" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
//ログインしたとき
protected void OpenIdLogin1_LoggedIn(object sender, O...
{
//OPから返されたユーザーの個人情報を取得する
DotNetOpenId.Extensions.SimpleRegistration.Claims...
e.Response.GetExtension
<DotNetOpenId.Extensions.SimpleRegistrati...
//メールアドレスと言語を覚えておく
Session["Email"] = claims.Email;
Session["Language"] = claims.Language;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
RequestEmail="Require"
RequestLanguage="Request"
PolicyUrl="~/PrivacyPolicy.aspx" />
</div>
</form>
</body>
</html>
}}
ここでは紹介しませんが、OpenIdLoginコントロールのプロパテ...
**認証ポリシーを要求する [#k7ad2333]
[[OpenID Provider Authentication Policy Extension>http://...
認証ポリシーのURIは、AuthenticationPoliciesクラス(DotNet...
|名前|説明|h
|MultiFactor|複数要素認証&br;http://schemas.openid.net/pa...
|PhishingResistant|フィッシング耐性認証&br;http://schemas...
|PhysicalMultiFactor|物理的複数要素認証&br;http://schemas...
認証ポリシーを要求しても実際にその通りに認証が行われると...
今のところ要求した認証ポリシー通りに認証を行うOPはかなり...
以下に、フィッシング耐性、複数要素、物理的複数要素を要求...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
tagprefix="RP" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
'ログインする直前
Protected Sub OpenIdLogin1_LoggingIn(ByVal sender As ...
ByVal e As OpenI...
'PolicyRequestを作成する
Dim pr As New DotNetOpenId.Extensions.ProviderAut...
'認証ポリシーを追加する
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhishingResistant)
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.MultiFactor)
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhysicalMultiFactor)
'OpenID Extensionを追加する
e.Request.AddExtension(pr)
End Sub
'ログインしたとき
Protected Sub OpenIdLogin1_LoggedIn(ByVal sender As O...
ByVal e As OpenId...
'OPが使用した認証ポリシーを覚えておく
Dim pr As DotNetOpenId.Extensions.ProviderAuthent...
e.Response.GetExtension( _
Of DotNetOpenId.Extensions.ProviderAuthen...
If Not pr Is Nothing Then
Session("ActualPolicies") = pr.ActualPolicies
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
//ログインする直前
protected void OpenIdLogin1_LoggingIn(object sender, ...
{
//PolicyRequestを作成する
DotNetOpenId.Extensions.ProviderAuthenticationPol...
new DotNetOpenId.Extensions.ProviderAuthentic...
//認証ポリシーを追加する
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhishingResistant);
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.MultiFactor);
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhysicalMultiFacto...
//OpenID Extensionを追加する
e.Request.AddExtension(pr);
}
//ログインしたとき
protected void OpenIdLogin1_LoggedIn(object sender, O...
{
//OPが使用した認証ポリシーを覚えておく
DotNetOpenId.Extensions.ProviderAuthenticationPol...
e.Response.GetExtension<
DotNetOpenId.Extensions.ProviderAuthentic...
if (pr != null)
{
Session["ActualPolicies"] = pr.ActualPolicies;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
</form>
</body>
</html>
}}
**OpenIdLoginコントロールのOpenIDに関するプロパティ [#e0a...
今まで紹介できなかったOpenIdLoginコントロールのプロパティ...
|名前|説明|h
|ImmediateMode|openid.modeをcheckid_immediateにするか、ch...
|RealmUrl|openid.realm(あるいは、openid.trust_root)に設...
|RequireSsl|OPとのやり取りをすべてHTTPSで行う。安全が確保...
|ReturnToUrl|openid.return_toとして指定するURL(ただし実...
|Stateless|statelessモード(dumbモード)で行う。stateless...
|CustomApplicationStore|正直詳しくはわからないが、Webファ...
**RP discoveryを発行する [#w0c9c097]
ここからはOpenIdLoginコントロールだけでなく、DotNetOpenId...
今まで紹介してきたサンプルを使ってYahoo! USAをOPとして認...
Warning: This website has not confirmed its identity with...
これは作成したRPが、OpenID Authentication 2.0の仕様書にあ...
RP discoveryの発行は、[[Yadisプロトコル>http://yadis.org/...
実際にRPを改造してRP discoveryに対応してみましょう。まず...
また、ContentTypeを"application/xrds+xml"とする点にも注意...
以下に例を示します。なおこのコードは、"xrds.aspx"というフ...
#code(vbnet){{
<%@ Page Language="vb" ContentType="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...
<URI><%=New Uri(Request.Url, _
Response.ApplyAppPathModifier("~/login.as...
</Service>
</XRD>
</xrds:XRDS>
}}
#code(csharp){{
<%@ Page Language="C#" ContentType="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...
<URI><%=new Uri(Request.Url,
Response.ApplyAppPathModifier("~/login.as...
</Service>
</XRD>
</xrds:XRDS>
}}
次に、OPがXRDSドキュメントの場所を知ることができるように...
#code(html){{
<meta http-equiv="X-XRDS-Location" content="http://localh...
}}
のような記述をHTMLのヘッダに書き加えます("http://localho...
HTTPレスポンスヘッダを使用する場合は、HTTPレスポンスヘッ...
これらはDotNetOpenIdライブラリで用意されているXrdsPublish...
OpenIdLoginコントロールの場合、"realm"を指定するRealmUrl...
Default.aspxにXrdsPublisherコントロールを配置した例を以下...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<openid:XrdsPublisher ID="XrdsPublisher1" runat="serv...
XrdsUrl="~/xrds.aspx" XrdsAdvertisement="Both">
</openid:XrdsPublisher>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<openid:XrdsPublisher ID="XrdsPublisher1" runat="serv...
XrdsUrl="~/xrds.aspx" XrdsAdvertisement="Both">
</openid:XrdsPublisher>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
これでYahoo!の警告が消えたはずです。
**OPのブラックリスト、ホワイトリストを設定する [#cfd6ba4c]
「このOPは信頼できないから、このOPは常に拒否したい」とい...
BlacklistHostsプロパティに登録されるホスト名は、OpenID UR...
"hogehoge.com"で終わるホスト名をすべて拒否したいのであれ...
ホワイトリストへの登録も同様で、WhitelistHostsプロパティ...
ブラックリストで引っかかってもホワイトリストに登録されて...
ヘルプによると、ホワイトリストに登録されていればスタンダ...
ブラックリスト、ホワイトリストへの登録は、Web.configでも...
#pre{{
<configuration>
<configSections>
<sectionGroup name="dotNetOpenId">
<section name="untrustedWebRequest"
type="DotNetOpenId.Configuration.Untrusted...
requirePermission="false"
allowLocation="false"/>
</sectionGroup>
</configSections>
<dotNetOpenId>
<untrustedWebRequest>
<whitelistHosts>
<add name="localhost" />
<add name="127.0.0.1" />
</whitelistHosts>
<whitelistHostsRegex>
</whitelistHostsRegex>
<blacklistHosts>
</blacklistHosts>
<blacklistHostsRegex>
<add name="(^|\.)hogehoge\.com$" />
</blacklistHostsRegex>
</untrustedWebRequest>
</dotNetOpenId>
</configuration>
}}
**次回予告 [#i360e722]
次回はOpenIdLoginコントロールを使わずにRPを作る方法を紹介...
**コメント [#i4a2729b]
- グッジョブ! -- K.Oumi &new{2009-07-07 (火) 09:17:16};
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2009-0...
終了行:
#title(OpenIDでログインできるサイトを作成する2)
#navi(.NETプログラミング研究)
#contents
*OpenIDでログインできるサイトを作成する2 [#v611a63b]
今回も前回に続いて、[[DotNetOpenId>http://code.google.com...
**OpenIdLoginの外観に関するプロパティ [#dc99f5cd]
OpenIdLoginは、デフォルトでは、文字や説明が英語で表示され...
OpenIdLoginコントロールの外観に関するプロパティを以下にま...
|名前|説明|h
|ButtonText|ログインボタンに表示する文字列。デフォルトは"...
|ButtonToolTip|ログインボタンのToolTipに表示する文字列。...
|ExampleUrl|テキストボックスに入力するOpenID URLのサンプ...
|ExamplePrefix|"ExampleUrl"の前に表示する文字列。"Example...
|LabelText|テクストボックスの左に表示する文字列。デフォル...
|RegisterText|OpenIDアカウントを作成するページへのリンク...
|RegisterToolTip|OpenIDアカウントを作成するページへのリン...
|RegisterUrl|OpenIDアカウントを作成するページへのリンクの...
|RegisterVisible|OpenIDアカウントを作成するページへのリン...
|RememberMe|"Remember me"チェックボックスにチェックを入れ...
|RememberMeText|"Remember me"チェックボックスに表示する文...
|RememberMeVisible|"Remember me"を表示するかどうか。デフ...
|ShowLogo|テキストボックスにOpenIDのロゴを表示するか。デ...
|RequiredText|テキストボックスになにも入力しないでログイ...
|UriFormatText|テキストボックスに正しくない形式の文字列が...
|UriValidatorEnabled|テキストボックスに正しくない形式の文...
|ValidationGroup|ボタンのValidationGroupプロパティに設定...
|IdSelectorIdentifier|[[ID Selector>https://www.idselecto...
|Columns|テキストボックスの幅。デフォルトは40。|
|CssClass|テキストボックスのCSSクラス。デフォルトは"openi...
**ユーザーの個人情報を要求する [#v98c69f2]
[[前号>../89]]の例で見たように、ChoixのログインではOpenID...
これらのプロパティにはDemandLevel列挙体の3つのメンバのう...
ただし、現時点ではSREGに対応していないOPが多いため、要求...
OPから返された個人情報は、OpenIdEventArgs.Responseプロパ...
OpenIdLoginコントロールの"Request"で始まるプロパティには...
|OpenIdLoginのプロパティ|説明|h
|RequestBirthDate|ユーザーの誕生日を取得するか(openid.sr...
|RequestCountry|ユーザーの国を取得するか(openid.sreg.cou...
|RequestEmail|ユーザーの電子メールアドレスを取得するか(o...
|RequestFullName|ユーザーのフルネームを取得するか(openid...
|RequestGender|ユーザーの性別を取得するか(openid.sreg.ge...
|RequestLanguage|ユーザーの言語を取得するか(openid.sreg....
|RequestNickname|ユーザーのニックネームを取得するか(open...
|RequestPostalCode|ユーザーの郵便番号を取得するか(openid...
|RequestTimeZone|ユーザーのタイムゾーンを取得するか(open...
個人情報の送信を要求したときは、PolicyUrlプロパティ(open...
次の例(login.aspx)では、OpenIDでログインするとき、メー...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
tagprefix="RP" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
'ログインしたとき
Protected Sub OpenIdLogin1_LoggedIn(ByVal sender As O...
ByVal e As OpenId...
'OPから返されたユーザーの個人情報を取得する
Dim claims As DotNetOpenId.Extensions.SimpleRegis...
e.Response.GetExtension( _
Of DotNetOpenId.Extensions.SimpleRegistra...
'メールアドレスと言語を覚えておく
Session("Email") = claims.Email
Session("Language") = claims.Language
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
RequestEmail="Require"
RequestLanguage="Request"
PolicyUrl="~/PrivacyPolicy.aspx" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
//ログインしたとき
protected void OpenIdLogin1_LoggedIn(object sender, O...
{
//OPから返されたユーザーの個人情報を取得する
DotNetOpenId.Extensions.SimpleRegistration.Claims...
e.Response.GetExtension
<DotNetOpenId.Extensions.SimpleRegistrati...
//メールアドレスと言語を覚えておく
Session["Email"] = claims.Email;
Session["Language"] = claims.Language;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
RequestEmail="Require"
RequestLanguage="Request"
PolicyUrl="~/PrivacyPolicy.aspx" />
</div>
</form>
</body>
</html>
}}
ここでは紹介しませんが、OpenIdLoginコントロールのプロパテ...
**認証ポリシーを要求する [#k7ad2333]
[[OpenID Provider Authentication Policy Extension>http://...
認証ポリシーのURIは、AuthenticationPoliciesクラス(DotNet...
|名前|説明|h
|MultiFactor|複数要素認証&br;http://schemas.openid.net/pa...
|PhishingResistant|フィッシング耐性認証&br;http://schemas...
|PhysicalMultiFactor|物理的複数要素認証&br;http://schemas...
認証ポリシーを要求しても実際にその通りに認証が行われると...
今のところ要求した認証ポリシー通りに認証を行うOPはかなり...
以下に、フィッシング耐性、複数要素、物理的複数要素を要求...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
tagprefix="RP" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
'ログインする直前
Protected Sub OpenIdLogin1_LoggingIn(ByVal sender As ...
ByVal e As OpenI...
'PolicyRequestを作成する
Dim pr As New DotNetOpenId.Extensions.ProviderAut...
'認証ポリシーを追加する
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhishingResistant)
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.MultiFactor)
pr.PreferredPolicies.Add( _
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhysicalMultiFactor)
'OpenID Extensionを追加する
e.Request.AddExtension(pr)
End Sub
'ログインしたとき
Protected Sub OpenIdLogin1_LoggedIn(ByVal sender As O...
ByVal e As OpenId...
'OPが使用した認証ポリシーを覚えておく
Dim pr As DotNetOpenId.Extensions.ProviderAuthent...
e.Response.GetExtension( _
Of DotNetOpenId.Extensions.ProviderAuthen...
If Not pr Is Nothing Then
Session("ActualPolicies") = pr.ActualPolicies
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
//ログインする直前
protected void OpenIdLogin1_LoggingIn(object sender, ...
{
//PolicyRequestを作成する
DotNetOpenId.Extensions.ProviderAuthenticationPol...
new DotNetOpenId.Extensions.ProviderAuthentic...
//認証ポリシーを追加する
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhishingResistant);
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.MultiFactor);
pr.PreferredPolicies.Add(
DotNetOpenId.Extensions.ProviderAuthenticatio...
AuthenticationPolicies.PhysicalMultiFacto...
//OpenID Extensionを追加する
e.Request.AddExtension(pr);
}
//ログインしたとき
protected void OpenIdLogin1_LoggedIn(object sender, O...
{
//OPが使用した認証ポリシーを覚えておく
DotNetOpenId.Extensions.ProviderAuthenticationPol...
e.Response.GetExtension<
DotNetOpenId.Extensions.ProviderAuthentic...
if (pr != null)
{
Session["ActualPolicies"] = pr.ActualPolicies;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<RP:OpenIdLogin ID="OpenIdLogin1" runat="server"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
</form>
</body>
</html>
}}
**OpenIdLoginコントロールのOpenIDに関するプロパティ [#e0a...
今まで紹介できなかったOpenIdLoginコントロールのプロパティ...
|名前|説明|h
|ImmediateMode|openid.modeをcheckid_immediateにするか、ch...
|RealmUrl|openid.realm(あるいは、openid.trust_root)に設...
|RequireSsl|OPとのやり取りをすべてHTTPSで行う。安全が確保...
|ReturnToUrl|openid.return_toとして指定するURL(ただし実...
|Stateless|statelessモード(dumbモード)で行う。stateless...
|CustomApplicationStore|正直詳しくはわからないが、Webファ...
**RP discoveryを発行する [#w0c9c097]
ここからはOpenIdLoginコントロールだけでなく、DotNetOpenId...
今まで紹介してきたサンプルを使ってYahoo! USAをOPとして認...
Warning: This website has not confirmed its identity with...
これは作成したRPが、OpenID Authentication 2.0の仕様書にあ...
RP discoveryの発行は、[[Yadisプロトコル>http://yadis.org/...
実際にRPを改造してRP discoveryに対応してみましょう。まず...
また、ContentTypeを"application/xrds+xml"とする点にも注意...
以下に例を示します。なおこのコードは、"xrds.aspx"というフ...
#code(vbnet){{
<%@ Page Language="vb" ContentType="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...
<URI><%=New Uri(Request.Url, _
Response.ApplyAppPathModifier("~/login.as...
</Service>
</XRD>
</xrds:XRDS>
}}
#code(csharp){{
<%@ Page Language="C#" ContentType="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...
<URI><%=new Uri(Request.Url,
Response.ApplyAppPathModifier("~/login.as...
</Service>
</XRD>
</xrds:XRDS>
}}
次に、OPがXRDSドキュメントの場所を知ることができるように...
#code(html){{
<meta http-equiv="X-XRDS-Location" content="http://localh...
}}
のような記述をHTMLのヘッダに書き加えます("http://localho...
HTTPレスポンスヘッダを使用する場合は、HTTPレスポンスヘッ...
これらはDotNetOpenIdライブラリで用意されているXrdsPublish...
OpenIdLoginコントロールの場合、"realm"を指定するRealmUrl...
Default.aspxにXrdsPublisherコントロールを配置した例を以下...
#code(vbnet){{
<%@ Page Language="vb" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<openid:XrdsPublisher ID="XrdsPublisher1" runat="serv...
XrdsUrl="~/xrds.aspx" XrdsAdvertisement="Both">
</openid:XrdsPublisher>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ Register assembly="DotNetOpenId" namespace="DotNetOpe...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<openid:XrdsPublisher ID="XrdsPublisher1" runat="serv...
XrdsUrl="~/xrds.aspx" XrdsAdvertisement="Both">
</openid:XrdsPublisher>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
これでYahoo!の警告が消えたはずです。
**OPのブラックリスト、ホワイトリストを設定する [#cfd6ba4c]
「このOPは信頼できないから、このOPは常に拒否したい」とい...
BlacklistHostsプロパティに登録されるホスト名は、OpenID UR...
"hogehoge.com"で終わるホスト名をすべて拒否したいのであれ...
ホワイトリストへの登録も同様で、WhitelistHostsプロパティ...
ブラックリストで引っかかってもホワイトリストに登録されて...
ヘルプによると、ホワイトリストに登録されていればスタンダ...
ブラックリスト、ホワイトリストへの登録は、Web.configでも...
#pre{{
<configuration>
<configSections>
<sectionGroup name="dotNetOpenId">
<section name="untrustedWebRequest"
type="DotNetOpenId.Configuration.Untrusted...
requirePermission="false"
allowLocation="false"/>
</sectionGroup>
</configSections>
<dotNetOpenId>
<untrustedWebRequest>
<whitelistHosts>
<add name="localhost" />
<add name="127.0.0.1" />
</whitelistHosts>
<whitelistHostsRegex>
</whitelistHostsRegex>
<blacklistHosts>
</blacklistHosts>
<blacklistHostsRegex>
<add name="(^|\.)hogehoge\.com$" />
</blacklistHostsRegex>
</untrustedWebRequest>
</dotNetOpenId>
</configuration>
}}
**次回予告 [#i360e722]
次回はOpenIdLoginコントロールを使わずにRPを作る方法を紹介...
**コメント [#i4a2729b]
- グッジョブ! -- K.Oumi &new{2009-07-07 (火) 09:17:16};
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2009-0...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]