我正在使用LiveID和Google提供程序将OpenID集成到我现有的应用程序中。在我的登录页面上,除了我已添加的“登录Google”和“使用Microsoft登录”按钮的原始登录字段外。在同一页面中处理来自不同供应商的AuthenticationResult
我可以成功读取上面都提供商AuthenticationResult数据,但我通过以下方式实现这个...
新登录按钮,我精心设计了一个返回URL来区分它们对用户的回报:
Protected Sub btn_google_Click(sender As Object, e As EventArgs) Handles btn_google.Click
Dim client As New GoogleOpenIdClient
Dim u As New System.Uri("http://www.mytest.com/login.aspx?action=signin&provider=google")
client.RequestAuthentication(New HttpContextWrapper(HttpContext.Current), u)
End Sub
Protected Sub btn_live_Click(sender As Object, e As EventArgs) Handles btn_live.Click
Dim client As New MicrosoftClient("xyz", "12345")
Dim u As New System.Uri("http://www.mytest.com/login.aspx?action=signin&provider=microsoft")
client.RequestAuthentication(New HttpContextWrapper(HttpContext.Current), u)
End Sub
因此,当用户被重定向回到login.aspx的,然后我有以下检查来处理登录功能:
If Not Page.IsPostBack Then
If Request.QueryString("action") IsNot Nothing AndAlso Request.QueryString("action").Trim = "signin" Then
If Request.QueryString("provider") IsNot Nothing AndAlso Request.QueryString("provider").Trim <> String.Empty Then
Select Case Request.QueryString("provider").Trim
Case "microsoft"
Dim client As New MicrosoftClient("xyz", "12345")
Dim u As New System.Uri("http://www.mytest.com/loginlive.aspx?action=signin&provider=microsoft")
Dim result As DotNetOpenAuth.AspNet.AuthenticationResult = client.VerifyAuthentication(New HttpContextWrapper(HttpContext.Current), u)
' remainder of logic removed
' ...
Case "google"
Dim client As New GoogleOpenIdClient
Dim result As DotNetOpenAuth.AspNet.AuthenticationResult = client.VerifyAuthentication(New HttpContextWrapper(HttpContext.Current))
' remainder of logic removed
' ...
End Select
End
End
End If
我的主要问题在于,这是处理AuthenticationResults的好方法吗?或者,是否有更好/更安全/更聪明的方法来完成相同的目标?
感谢您的输入。我很欣赏你的观点,但有一些保留意见,即......我希望能够自动登录到我的系统,如果他们已经通过谷歌登录这样的链接,如www.mydomain.com/autologin。 aspx?provider = Google',以节省正常登录页面上额外按钮的时间。此外,因为像ConsumerKey这样的字符串值只能使用一次,所以将它们移动到类中时,每次更新时都需要重新编译。这是不错的做法吗?对不起,我的编程技能只有平均水平,所以我可能错过了一些关键点。 – EvilDr 2013-06-04 07:53:32
1.直接登录:您仍然可以通过上述模式实现此目的。使用登录按钮中使用的相同方法。在自动登录的页面加载中使用相同的方法。aspx 2.将Consumerkey移动到代码中:消费者密钥可以保存在配置文件或资源文件中,您可以直接将它们引用到您的代码中。 我希望这会回答您的查询。 – 2013-06-04 09:52:55
好吧。我努力看到的一点是*为什么*你的代码比我的方法更好。再次指责我的经验,只是一些指针会很棒! – EvilDr 2013-06-06 10:31:33