开发者

Easy openid? .NET/JS?

I tried to underst开发者_高级运维and dotnetopenid and failed. I dont know asp.net well enough and i want to do this problematically.

Is there a simple JS openid lib? or a simple/good openid example doing it for a C# desktop application?


Here is an example of open ID in c# .net . Not desktop but web.

http://www.nikhedonia.com/notebook/entry/openid-and-asp-net-mvc/


Here is my aspx file, i only added one line, the WebApplication1.openidtest.Authenticate line

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!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>
    <% WebApplication1.openidtest.Authenticate("http://your_id.myopenid.com/"); %>
    </div>
    </form>
</body>
</html>

Here is the cs file. Note it works but doesnt handle things like errors and really is just for testing/breakpoints.

NOTE: If email is required and the user submit a persona that doesnt have an email there will be no email listed thus you must check and handle accordingly.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using DotNetOpenAuth;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
namespace WebApplication1
{
    static public class openidtest
    {
        static public void Authenticate(string openIdIdentifier)
        {
            var openId = new OpenIdRelyingParty();
            var response = openId.GetResponse();
            if (UserNeedsToLogin(response))
            {
                var request = openId.CreateRequest(openIdIdentifier);
                request.AddExtension(new ClaimsRequest { Email = DemandLevel.Require });
                request.RedirectingResponse.Send();
                return;
            }

            HandleAuthenticationResponse(response);
        }

        static bool UserNeedsToLogin(IAuthenticationResponse response)
        {
            return response == null;
        }

        static void HandleAuthenticationResponse(IAuthenticationResponse response)
        {
            switch (response.Status)
            {
                case AuthenticationStatus.Authenticated:
                    {
                        var claims = response.GetExtension<ClaimsResponse>();
                        if (claims != null)
                        {
                            var s = claims.Email;
                        }
                        return;
                        //return HandleSuccessfulLogin(response);
                    }
                case AuthenticationStatus.Canceled:
                    //_context.ErrorMessage = "Login was cancelled at the provider.";
                    break;
                case AuthenticationStatus.Failed:
                    //_context.ErrorMessage = "Login failed at the provider.";
                    break;
                case AuthenticationStatus.SetupRequired:
                    //_context.ErrorMessage = "The provider requires setup.";
                    break;
                default:
                    //_context.ErrorMessage = "Login failed.";
                    break;
            }
        }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜