前回 の続きで、ASP.NET Web アプリケーションでDotNetOpenAuth を使って OpenID によるユーザ認証を行います。
今回は、RealmとReturnToUrlを設定して認証後に戻ってくるURLを変更します。
【OpenID入力ページ】
demo3.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo3.aspx.cs" Inherits="Test.demo3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="Identifier" runat="server"></asp:TextBox>
<asp:Button id="Login" runat="server" Text=" ログイン " EnableViewState="False" onclick="btnLogin_Click" /><br />
<asp:Label ID="Result" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
demo3.aspx.cs
using System;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
namespace WebTest
{
public partial class demo3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (!this.Page.IsValid)
{
return;
}
using (OpenIdRelyingParty rp = new OpenIdRelyingParty())
{
try
{
// 認証後のページを設定
Uri uri = new Uri("http://" + Request.Url.Authority + "/demo3return.aspx");
// Realm(領域)を設定
Realm realm = new Realm("http://" + Request.Url.Authority);
// IAuthenticationRequestを作成
var req = rp.CreateRequest(Identifier.Text.Trim(), realm, uri);
// OpenID Provider に リダイレクト
req.RedirectToProvider();
}
catch (ProtocolException ex)
{
Result.Text = "ERROR:" + ex.Message;
}
}
}
}
}
【認証後のページ】
demo3return.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo3return.aspx.cs" Inherits="Test.demo3return" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "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:Label ID="Result" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
demo3return.aspx.cs
using System;
using DotNetOpenAuth.OpenId.RelyingParty;
namespace Test
{
public partial class demo3return : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//OpenIdRelyingPartyを作成
OpenIdRelyingParty rp = new OpenIdRelyingParty();
// IAuthenticationResponseを取得
var res = rp.GetResponse();
if (res != null)
{
if (res.Status == AuthenticationStatus.Authenticated)
{
Result.Text = "認証成功";
}
else
{
Result.Text = "認証失敗";
}
}
}
}
}
参考URL
OpenID
http://ja.wikipedia.org/wiki/OpenID
Yahoo OpenIDとは?
http://openid.yahoo.co.jp/
livedoor Auth OpenID
http://auth.livedoor.com/openid/
mixi OpenID
http://developer.mixi.co.jp/openid