DoboWiki
Top
> .NETプログラミング研究/89 をテンプレートにして作成
.NETプログラミング研究/89 をテンプレートにして作成
開始行:
#title(OpenIDでログインできるサイトを作成する1)
#navi(.NETプログラミング研究)
#contents
*OpenIDでログインできるサイトを作成する1 [#ic83db37]
OpenIDでログインできるサイトをASP.NETで作成する方法を説明...
**OpenIDとは? [#p843754a]
まずはOpenIDについて簡単に説明します。OpenIDとは、1つのID...
-[[OpenID - Wikipedia>http://ja.wikipedia.org/wiki/OpenID]]
OpenIDの仕様は、「[[OpenID ≫ Read the Specifications>http...
実際にOpenIDを使った方が分かりやすいと思いますので、実際...
まずはOpenIDを取得します。OpenIDを発行しているサイトは、...
ここでは、[[OpenID.ne.jp>http://www.openid.ne.jp/]]でOpen...
次にこのOpenIDを使って、OpenIDに対応したサイトにログイン...
Choixのトップページの上に「ログイン」というリンクがありま...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ただし、Choixのログインページにも書かれていますが、ここに...
OpenIDを入力して「ログイン」ボタンを押すと、OpenID.ne.jp...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
パスワードを入力して「ログイン」ボタンを押すと、今度は「O...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
このページでは、
現在 https://www.choix.jpで、あなたのOpenid (http://usern...
という文章が表示されます。そしてその下のチェックボックス...
その下に「一度だけ認証」「認証状態を保持」「認証拒否」と...
ボタンをクリックすると、今度はChoixのページに戻ってきます。
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
「Choix IDの設定」という会員登録のフォームページが表示さ...
Choixの会員登録が完了すれば、次回からはOpenIDでログインが...
**この記事で使用している用語 [#c86378fb]
OpenIDでよく使われる用語があります。この記事でもこれらの...
:OpenID Provider|OPと略します。OpenIDの認証をするサーバー...
:Relying Party|RPと略します。OpenIDの認証を受け取る側のWe...
:Claimed Identifier|ユーザーのOpenID URLのことです。上記...
さらにここでは、エンドユーザー(OpenIDを使ってログインし...
**DotNetOpenIdを使ってRelying Partyを作成する [#qcf1a58c]
それでは本題に入りましょう。ここではDotNetOpenIdを使いま...
#column(補足){{
DotNetOpenId以外にも.NET Frameworkで使用できるライブラリ...
-[[OpenID Consumer for .NET 2.0>http://extremeswank.com/a...
-[[DNOpenID>http://www.codeplex.com/DNOpenID]]
-[[OpenID implementation in C# and ASP.NET>http://madskri...
}}
#column(補足){{
DotNetOpenIdを使用したサンプルは、DotNetOpenIdアーカイブ...
}}
Visual StudioでRPのプロジェクトを新規に作成するか、すでに...
Web.configの"authentication mode"が"Forms"以外の場合は、"...
#pre{{
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="RelyingPartySession" loginUrl="login.a...
</authentication>
</system.web>
</configuration>
}}
Visual Studioの左側にあるツールボックスで右クリックしてメ...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
これでツールボックスに"OpenIdLogin"などのコントロール追加...
ログインページ"login.aspx"を作成し、そのページにツールボ...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
OpenIdLoginコントロールを配置しただけのlogin.aspxのソース...
#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">
<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" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ 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">
</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" />
</div>
</form>
</body>
</html>
}}
実はこれだけでRPが出来上がっています。しかしこれだけでは...
#code(vbnet){{
<%@ Page Language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</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#" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
これで完了です。早速実行してみましょう。
Default.aspxをWebブラウザで開くと、LoginStatusコントロー...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
このページでOpenIDを入力し、「Login」ボタンをクリックしま...
たったこれだけでRPを作れてしまいました。
**Claimed Identifierを取得する [#bf0a45ea]
認証に成功した時、OPが送信するユーザーのClaimed Identifie...
また、これとは別に、IAuthenticationResponse.FriendlyIdent...
ちなみに、LoginNameコントロールに表示される名前は、Claime...
**OPに移動する前にキャンセルする [#ma5e5091]
例えば、OpenIdLoginコントロールのテキストボックスに入力さ...
**OPからキャンセルされたり、認証が失敗した時 [#r487b3e0]
認証を行うOPのページでユーザーがキャンセルをすることもで...
また、認証に失敗したときは、Failedイベントが発生します。...
**LoggedIn、LoggingIn、Canceled、Failedイベントを使用した...
先に紹介したLoggedIn、LoggingIn、Canceled、Failedイベント...
LoggedInイベントハンドラでは、Claimed Identifierをセッシ...
#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...
'Claimed Identifierを覚えておく
Session("ClaimedIdentifier") = e.Response.Claimed...
End Sub
'ログインする前
Protected Sub OpenIdLogin1_LoggingIn(ByVal sender As ...
ByVal e As OpenI...
'OpenID URLに"hogehoge.com"が含まれていたらキャン...
If OpenIdLogin1.Text.IndexOf("hogehoge.com") > -1...
MessageLabel.Text = """hogehoge.com""はダメで...
e.Cancel = True
Else
MessageLabel.Text = ""
End If
End Sub
'OPからキャンセルされたとき
Protected Sub OpenIdLogin1_Canceled(ByVal sender As O...
ByVal e As OpenId...
MessageLabel.Text = "キャンセルされました。"
End Sub
'認証が失敗したとき
Protected Sub OpenIdLogin1_Failed(ByVal sender As Obj...
ByVal e As OpenIdEv...
MessageLabel.Text = "エラー : " & e.Response.Exce...
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"
oncanceled="OpenIdLogin1_Canceled"
onfailed="OpenIdLogin1_Failed"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
<div>
<asp:Label ID="MessageLabel" runat="server" Enabl...
</asp:Label>
</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...
{
//Claimed Identifierを覚えておく
Session["ClaimedIdentifier"] = e.Response.Claimed...
}
//ログインする前
protected void OpenIdLogin1_LoggingIn(object sender, ...
{
//OpenID URLに"hogehoge.com"が含まれていたらキャ...
if (OpenIdLogin1.Text.IndexOf("hogehoge.com") > -1)
{
MessageLabel.Text = "\"hogehoge.com\"はダメで...
e.Cancel = true;
}
else
{
MessageLabel.Text = "";
}
}
//OPからキャンセルされたとき
protected void OpenIdLogin1_Canceled(object sender, O...
{
MessageLabel.Text = "キャンセルされました。";
}
//認証が失敗したとき
protected void OpenIdLogin1_Failed(object sender, Ope...
{
MessageLabel.Text = "エラー : " + e.Response.Exce...
}
</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"
oncanceled="OpenIdLogin1_Canceled"
onfailed="OpenIdLogin1_Failed"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
<div>
<asp:Label ID="MessageLabel" runat="server" Enabl...
</asp:Label>
</div>
</form>
</body>
</html>
}}
**次回予告 [#i360e722]
次回はOpenIdLoginコントロールについてさらに詳しく紹介する...
**コメント [#a03d14c4]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2009-0...
終了行:
#title(OpenIDでログインできるサイトを作成する1)
#navi(.NETプログラミング研究)
#contents
*OpenIDでログインできるサイトを作成する1 [#ic83db37]
OpenIDでログインできるサイトをASP.NETで作成する方法を説明...
**OpenIDとは? [#p843754a]
まずはOpenIDについて簡単に説明します。OpenIDとは、1つのID...
-[[OpenID - Wikipedia>http://ja.wikipedia.org/wiki/OpenID]]
OpenIDの仕様は、「[[OpenID ≫ Read the Specifications>http...
実際にOpenIDを使った方が分かりやすいと思いますので、実際...
まずはOpenIDを取得します。OpenIDを発行しているサイトは、...
ここでは、[[OpenID.ne.jp>http://www.openid.ne.jp/]]でOpen...
次にこのOpenIDを使って、OpenIDに対応したサイトにログイン...
Choixのトップページの上に「ログイン」というリンクがありま...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ただし、Choixのログインページにも書かれていますが、ここに...
OpenIDを入力して「ログイン」ボタンを押すと、OpenID.ne.jp...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
パスワードを入力して「ログイン」ボタンを押すと、今度は「O...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
このページでは、
現在 https://www.choix.jpで、あなたのOpenid (http://usern...
という文章が表示されます。そしてその下のチェックボックス...
その下に「一度だけ認証」「認証状態を保持」「認証拒否」と...
ボタンをクリックすると、今度はChoixのページに戻ってきます。
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
「Choix IDの設定」という会員登録のフォームページが表示さ...
Choixの会員登録が完了すれば、次回からはOpenIDでログインが...
**この記事で使用している用語 [#c86378fb]
OpenIDでよく使われる用語があります。この記事でもこれらの...
:OpenID Provider|OPと略します。OpenIDの認証をするサーバー...
:Relying Party|RPと略します。OpenIDの認証を受け取る側のWe...
:Claimed Identifier|ユーザーのOpenID URLのことです。上記...
さらにここでは、エンドユーザー(OpenIDを使ってログインし...
**DotNetOpenIdを使ってRelying Partyを作成する [#qcf1a58c]
それでは本題に入りましょう。ここではDotNetOpenIdを使いま...
#column(補足){{
DotNetOpenId以外にも.NET Frameworkで使用できるライブラリ...
-[[OpenID Consumer for .NET 2.0>http://extremeswank.com/a...
-[[DNOpenID>http://www.codeplex.com/DNOpenID]]
-[[OpenID implementation in C# and ASP.NET>http://madskri...
}}
#column(補足){{
DotNetOpenIdを使用したサンプルは、DotNetOpenIdアーカイブ...
}}
Visual StudioでRPのプロジェクトを新規に作成するか、すでに...
Web.configの"authentication mode"が"Forms"以外の場合は、"...
#pre{{
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="RelyingPartySession" loginUrl="login.a...
</authentication>
</system.web>
</configuration>
}}
Visual Studioの左側にあるツールボックスで右クリックしてメ...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
これでツールボックスに"OpenIdLogin"などのコントロール追加...
ログインページ"login.aspx"を作成し、そのページにツールボ...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
OpenIdLoginコントロールを配置しただけのlogin.aspxのソース...
#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">
<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" />
</div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<%@ 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">
</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" />
</div>
</form>
</body>
</html>
}}
実はこれだけでRPが出来上がっています。しかしこれだけでは...
#code(vbnet){{
<%@ Page Language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</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#" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:LoginStatus ID="LoginStatus1" runat="server"...
</div>
</form>
</body>
</html>
}}
これで完了です。早速実行してみましょう。
Default.aspxをWebブラウザで開くと、LoginStatusコントロー...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
このページでOpenIDを入力し、「Login」ボタンをクリックしま...
たったこれだけでRPを作れてしまいました。
**Claimed Identifierを取得する [#bf0a45ea]
認証に成功した時、OPが送信するユーザーのClaimed Identifie...
また、これとは別に、IAuthenticationResponse.FriendlyIdent...
ちなみに、LoginNameコントロールに表示される名前は、Claime...
**OPに移動する前にキャンセルする [#ma5e5091]
例えば、OpenIdLoginコントロールのテキストボックスに入力さ...
**OPからキャンセルされたり、認証が失敗した時 [#r487b3e0]
認証を行うOPのページでユーザーがキャンセルをすることもで...
また、認証に失敗したときは、Failedイベントが発生します。...
**LoggedIn、LoggingIn、Canceled、Failedイベントを使用した...
先に紹介したLoggedIn、LoggingIn、Canceled、Failedイベント...
LoggedInイベントハンドラでは、Claimed Identifierをセッシ...
#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...
'Claimed Identifierを覚えておく
Session("ClaimedIdentifier") = e.Response.Claimed...
End Sub
'ログインする前
Protected Sub OpenIdLogin1_LoggingIn(ByVal sender As ...
ByVal e As OpenI...
'OpenID URLに"hogehoge.com"が含まれていたらキャン...
If OpenIdLogin1.Text.IndexOf("hogehoge.com") > -1...
MessageLabel.Text = """hogehoge.com""はダメで...
e.Cancel = True
Else
MessageLabel.Text = ""
End If
End Sub
'OPからキャンセルされたとき
Protected Sub OpenIdLogin1_Canceled(ByVal sender As O...
ByVal e As OpenId...
MessageLabel.Text = "キャンセルされました。"
End Sub
'認証が失敗したとき
Protected Sub OpenIdLogin1_Failed(ByVal sender As Obj...
ByVal e As OpenIdEv...
MessageLabel.Text = "エラー : " & e.Response.Exce...
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"
oncanceled="OpenIdLogin1_Canceled"
onfailed="OpenIdLogin1_Failed"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
<div>
<asp:Label ID="MessageLabel" runat="server" Enabl...
</asp:Label>
</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...
{
//Claimed Identifierを覚えておく
Session["ClaimedIdentifier"] = e.Response.Claimed...
}
//ログインする前
protected void OpenIdLogin1_LoggingIn(object sender, ...
{
//OpenID URLに"hogehoge.com"が含まれていたらキャ...
if (OpenIdLogin1.Text.IndexOf("hogehoge.com") > -1)
{
MessageLabel.Text = "\"hogehoge.com\"はダメで...
e.Cancel = true;
}
else
{
MessageLabel.Text = "";
}
}
//OPからキャンセルされたとき
protected void OpenIdLogin1_Canceled(object sender, O...
{
MessageLabel.Text = "キャンセルされました。";
}
//認証が失敗したとき
protected void OpenIdLogin1_Failed(object sender, Ope...
{
MessageLabel.Text = "エラー : " + e.Response.Exce...
}
</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"
oncanceled="OpenIdLogin1_Canceled"
onfailed="OpenIdLogin1_Failed"
onloggedin="OpenIdLogin1_LoggedIn"
onloggingin="OpenIdLogin1_LoggingIn" />
</div>
<div>
<asp:Label ID="MessageLabel" runat="server" Enabl...
</asp:Label>
</div>
</form>
</body>
</html>
}}
**次回予告 [#i360e722]
次回はOpenIdLoginコントロールについてさらに詳しく紹介する...
**コメント [#a03d14c4]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2009-0...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]