前回 の続きで、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