用于ASP.net网站身份验证的Gmail凭据

时间:2012-02-08 19:20:24

标签: c# asp.net openid gmail

我有两个用户名和密码的文本框我现在希望用户输入他们公司的电子邮件ID和密码(用户名和密码由谷歌提供,网络服务器是谷歌)并登录到ASP.net网站。创建用户名的会话和密码。我希望用户能够使用相同的gmail凭证从asp.net网站发送电子邮件。请提前告知您,任何类型的帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您应该检查OpenId库中的C#。

http://code.google.com/p/dotnetopenid/

这将为您提供一个良好的开端。这样,用户就不必直接使用他的密码,并将重定向到将为您的网站授予身份验证的提供商。

答案 1 :(得分:2)

我想要的答案是这个,这个代码工作正常。我不会在会话和数据库中的任何地方存储密码。

<form id="form1" runat="server">  
      <div id="loginform">  
        <div id="NotLoggedIn" runat="server">  
          Log in with <img src="http://www.google.com/favicon.ico" />  
            <asp:Button ID="btnLoginToGoogle" Runat="server" Text="Google"     OnCommand="OpenLogin_Click"  
              CommandArgument="https://www.google.com/accounts/o8/id" />  
          <p /><asp:Label runat="server" ID="lblAlertMsg" />  
        </div>  
      </div>  
    </form>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        OpenIdAjaxRelyingParty rp = new OpenIdAjaxRelyingParty();
        var r = rp.GetResponse();
        if (r != null)
        {
            switch (r.Status)
            {


       case AuthenticationStatus.Authenticated:
                NotLoggedIn.Visible = false;
                Session["GoogleIdentifier"] = r.ClaimedIdentifier.ToString();
                Response.Redirect("Default2.aspx");
                break;
            case AuthenticationStatus.Canceled:
                lblAlertMsg.Text = "Cancelled.";
                break;
        }

    }

}
protected void OpenLogin_Click(object sender, CommandEventArgs e)
{
    string discoveryUri = e.CommandArgument.ToString();
    OpenIdRelyingParty openid = new OpenIdRelyingParty();
    var b = new UriBuilder(Request.Url) { Query = "" };
    var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri);
    req.RedirectToProvider();
}
}

但我还有进一步的疑问是如何获取用户登录的用户名来创建会话...... ???我可以在某处看到它...

答案 2 :(得分:0)

不,谷歌不会让你这样做。您必须执行类似于StackOverflow正在执行的操作(提供OpenID功能以验证 google.com上)。