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

C# 用于ASP.net网站身份验证的Gmail凭据,c#,asp.net,openid,gmail,C#,Asp.net,Openid,Gmail,我有两个用户名和密码文本框,现在我希望用户输入他们公司的电子邮件Id和密码(用户名和密码由谷歌提供,Web服务器由谷歌提供)并登录到ASP.net网站。创建用户名和密码会话。此外,我希望用户能够使用相同的gmail凭据从ASP.net网站发送电子邮件。提前感谢您,任何类型的帮助都将不胜感激。您应该检查OpenId库中的C 这会给你一个好的开始。这样,用户就不必直接使用密码,并将被重定向到为您的站点授予身份验证的提供商。不,谷歌不允许您这样做。您必须执行与StackOverflow类似的操作(在

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

您应该检查OpenId库中的C


这会给你一个好的开始。这样,用户就不必直接使用密码,并将被重定向到为您的站点授予身份验证的提供商。

不,谷歌不允许您这样做。您必须执行与StackOverflow类似的操作(在google.com上提供OpenID功能进行身份验证)。

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

<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();
}
}

登录

使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用System.Web; 使用System.Web.UI; 使用System.Web.UI.WebControl; 使用DotNetOpenAuth.OpenId; 使用DotNetOpenAuth.OpenId.RelyingParty; 公共部分类\u默认值:System.Web.UI.Page { 受保护的无效页面加载(对象发送方、事件参数e) { OpenIdAjaxRelyingParty rp=新的OpenIdAjaxRelyingParty(); var r=rp.GetResponse(); 如果(r!=null) { 开关(右状态) { 案例验证状态。已验证: NotLoggedIn.Visible=false; 会话[“GoogleIdentifier”]=r.ClaimedIdentifier.ToString(); 重定向(“Default2.aspx”); 打破 案例身份验证状态。已取消: lblAlertMsg.Text=“已取消。”; 打破 } } } 受保护的void OpenLogin\u单击(对象发送者,CommandEventArgs e) { string discoveryUri=e.CommandArgument.ToString(); OpenIdRelyingParty openid=新OpenIdRelyingParty(); var b=新的UriBuilder(Request.Url){Query=”“}; var req=openid.CreateRequest(discoveryUri,b.Uri,b.Uri); req.redirectTopProvider(); } }


但我仍然有进一步的疑问,那就是如何获取用户用来创建会话的用户名…??可以做到我在某处见过它…

可能重复:您描述了您的代码应该做什么,但您没有问任何问题。你尝试了什么,遇到了什么麻烦?请不要实际请求他们的谷歌帐户的用户名和密码。任何这样做的程序员都不应该被允许靠近计算机。@M.Babcock我的问题是如何做到这一点是可能的。@Ramhound:对不起,但我的意图并不是我误解了自己……我想要像janrain.com这样的东西。这可能吗?请帮我解决一下……像这样的东西可以为我做吗。他只能从同一个asp.net应用程序发送电子邮件。我不这么认为——我刚才在那里看了一个演示视频,谷歌的登录页面显示在一个弹出窗口中。因此,虽然你可以在你的页面上塞满uid/pwd文本框,声称他们将登录谷歌,但只有傻瓜才会在那里输入他们,而不是先检查url。所以,即使你们成功地做到了这一点,我怀疑你们会有很多用户。我想要的答案是这并不苛刻@Hari。我没有正确提问。用户名(而是电子邮件地址)将在成功登录并从谷歌重定向后返回给您。google.com会要求用户授权你的应用程序查看电子邮件地址(只有一次,在首次成功登录后),只有在这之后,你才能取回用户和该电子邮件地址。不过,我不知道这有什么技术性。@Hari在成功登录后,我仍然没有找到获取用户电子邮件id的解决方案…???有可能获取电子邮件id吗。?