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