ASP.NET Web アプリケーションで DotNetOpenAuth を使って OpenID によるユーザ認証を行います。

DotNetOpenAuthは、OpenID, OAuth, InfoCardを簡単に使用する.NETのライブラリです。

DotNetOpenAuth
http://www.dotnetopenauth.net/

 

OpenIDは、Yahoo, Hatena, livedoor, mixiなどのアカウントを持っているならば、簡単に発行してもらえます。

下記コードでは「 http://profile.livedoor.com/YourID/ 」などと入力し、ログインボタンをクリックするとOpenIDによる認証を行うことができます。

 

demo1.aspx

<!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: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>

 

demo1.aspx.cs

using System;

using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId.RelyingParty;

namespace Test
{
    public partial class demo1 : 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 = "認証失敗";
                }
            }
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (!this.Page.IsValid)
            {
                return;
            }

            using (OpenIdRelyingParty rp = new OpenIdRelyingParty())
            {
                try
                {
                    // IAuthenticationRequestを作成 
                    var req = rp.CreateRequest(Identifier.Text.Trim());

                    // OpenID Provider に リダイレクト
                    req.RedirectToProvider();
                }
                catch (ProtocolException ex)
                {
                    Result.Text = "ERROR1:" + ex.Message;
                }
            }
        }
    }
}

 

はてなの場合、SREG(OpenID Simple Registration Extension)を使用してニックネームの取得が可能です。

Page_Load

Result.Text = "認証成功";

//ニックネームを取得する
ClaimsResponse cr = res.GetExtension<ClaimsResponse>();
if (cr != null)
{
	Result.Text += cr.Nickname;
}

 

btnLogin_Click

// IAuthenticationRequestを作成 
var req = rp.CreateRequest(Identifier.Text.Trim());

//ニックネームを要求する
req.AddExtension(new ClaimsRequest
{
	Nickname = DemandLevel.Request
});

// OpenID Provider に リダイレクト
req.RedirectToProvider();

 

※Yahooはローカルで実行すると「このサイトには現在ログインできません。しばらく時間をおいてから再度お試しください。 」というエラーメッセージが表示されるかもしれません。

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading