Sto integrando OpenID alla mia applicazione esistente con LiveID e provider di Google. Nella mia pagina di accesso, oltre ai campi di accesso originali, ho aggiunto i pulsanti "Accedi con Google" e "Accedi con Microsoft".Elaborazione di AuthenticationResult di provider diversi nella stessa pagina
posso leggere correttamente i dati AuthenticationResult per entrambi i fornitori di cui sopra, ma sto realizzare questo nel modo seguente ...
Per i nuovi pulsanti d'accesso ho predisposto un URL di ritorno per differenziarli sul ritorno dell'utente:
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
Così, quando l'utente viene reindirizzato a Login.aspx, ho poi avuto i seguenti controlli per elaborare la funzionalità di login:
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
La mia domanda principale è, questo è un buon modo per elaborare AuthenticationResults? O c'è un modo migliore/più sicuro/più intelligente per realizzare lo stesso?
Grazie per quell'input. Apprezzo i tuoi punti, ma ho qualche riserva, in particolare ... speravo di poter accedere automaticamente a un utente al mio sistema se erano già registrati tramite Google con un link come questo "www.mydomain.com/autologin". aspx? provider = Google' per risparmiare tempo colpendo pulsanti extra nella normale pagina di accesso. Inoltre, poiché i valori di stringa come ConsumerKey vengono utilizzati solo una volta, spostarli in una classe richiederebbe una ricompilazione ogni volta che vengono aggiornati. È una buona pratica? Spiacente, le mie capacità di codifica sono solo nella media, quindi potrei aver perso alcuni punti chiave del tuo approccio. – EvilDr
1. accesso diretto: è ancora possibile ottenere ciò con il modello che ho detto sopra. Utilizzando le stesse metodologie utilizzate nel pulsante di accesso. Utilizzare lo stesso sul caricamento della pagina dell'autologin.aspx 2. Spostamento di Consumerkey nel codice: la chiave del consumatore può essere conservata nel file config o di risorsa e puoi indirizzarla direttamente nel tuo codice. Spero che questo risponda alla tua richiesta. –
Ok, bene. Il bit che sto faticando a vedere è * perché * il tuo codice è migliore del mio approccio. Di nuovo incolpare la mia esperienza, solo alcuni suggerimenti sarebbero fantastici! – EvilDr