2014-01-23 12 views
6

Ich verwende die Google APIs-Vorschau (1.7.0), um einen Benutzer über OAuth2 zu autorisieren. Ich habe die sample MVC code verfolgt. Dies ist meine Implementierung von FlowMetadata:Zugriff auf Benutzerinformationen mit Google APIs für .NET

private static readonly IAuthorizationCodeFlow flow = ...; // Implementation of tokens 

public static async Task<Google.Apis.Auth.OAuth2.Web.AuthorizationCodeWebApp.AuthResult> GetCredentials(Controller controller, CancellationToken cancellationToken) { 
    var result = await new AuthorizationCodeMvcApp(controller, new Models.Generic.AppFlowMetadata()).AuthorizeAsync(cancellationToken); 
    if (result.Credential != null) 
    { 
     // Struggling here. How do I make a request to get the e-mail address? 
    } 
} 

ich jetzt eine gültige UserCredential und daher Zugriffstoken haben, aber ich kann nicht alle verwalteten APIs für den Zugriff auf den Benutzer Informationen finden. Ich habe this question gefunden, aber das scheint anzunehmen, dass ich nur rohe Anfragen mache, anstatt die offizielle Bibliothek zu benutzen.

Wie kann ich die E-Mail-Adresse des Benutzers abrufen?

+0

Können Sie nach Code von 'private static nur lesbar IAuthorizationCodeFlow Flow = ...; // Implementierung von Token'. Eigentlich stecke ich an diesem Punkt und bekomme keine Lösung. Hier ist [link] (https://stackoverflow.com/questions/44842813/google-calendar-api-working-fine-locally-but-not-raising-its-authentication-on-s-s) zu meiner Frage – Divya

+0

gerade jetzt ich bekomme dieses Problem. [Meine Frage] (https://stackoverflow.com/questions/45103628/access-to-the-path-c-windows-system32-config-systemprofile-is-denied) – Divya

Antwort

18

sollten Sie Folgendes tun: https://www.nuget.org/packages/Google.Apis.Oauth2.v2

  • hinzufügen Google.Apis.Oauth2.v2:

    1. Neben Google.Apis.Auth NuGet Paket, das Sie auf der folgenden Seite installieren sollten. Oauth2Service.Scope.UserinfoProfile und auch Google.Apis.Oauth2.v2.Oauth2Service.Scope.UserinfoEmail zu der Bereichsliste (wenn Sie die AppFlowMetadata initialisieren). Jetzt

    2. , fügen Sie den folgenden Code ein:

    if (result.Credential != null) 
    { 
        var oauthSerivce = new Google.Apis.Oauth2.v2.Oauth2Service(
         new BaseClientService.Initializer() 
         { 
          HttpClientInitializer = credential, 
          ApplicationName = "OAuth 2.0 Sample", 
         }); 
    
        var userInfo = await oauthSerivce.Userinfo.Get().ExecuteAsync(); 
        // You can use userInfo.Email, Gender, FamilyName, ... 
    } 
    
  • +0

    Gute Arbeit. Nur eine kleine Anpassung, die ich an Ihrer Antwort vorgenommen habe, war, den 'Google.Apis.Oauth2.v2.Oauth2Service.Scope.UserinfoEmail' Geltungsbereich hinzuzufügen :) – CodingIntrigue

    +1

    Was ist mit Anmeldeinformationen? –

    +0

    @ SebastiánRojas result.Credential – razon

    0

    Hier bearbeite ich meine Antwort. Bitte sieh dir das an. Auf der Default2.aspx-Seite zeige ich den Wert für Session ["username"] und Session ["useremail"] im Label an. Ich hoffe, das wird dir helfen.

    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; 
    using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; 
    using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; 
    
    public partial class _Default : System.Web.UI.Page 
    { 
    
        protected void Page_Load(object sender, EventArgs e) 
        { 
    
         openIdAuth(); 
    
        } 
    
        protected void openIdAuth() 
        { 
         OpenIdAjaxRelyingParty rp = new OpenIdAjaxRelyingParty(); 
         var response = rp.GetResponse(); 
    
         if (response != null) 
         { 
         switch (response.Status) 
         { 
          case AuthenticationStatus.Authenticated: 
           NotLoggedIn.Visible = false; 
           Session["GoogleIdentifier"] = response.ClaimedIdentifier.ToString(); 
    
           var fetchResponse = response.GetExtension<FetchResponse>(); 
           Session["FetchResponse"] = fetchResponse; 
           var response2 = Session["FetchResponse"] as FetchResponse; 
    
           string UserName = response2.GetAttributeValue(WellKnownAttributes.Name.First) ?? "Guest"; // with the OpenID Claimed Identifier as their username. 
           string UserEmail = response2.GetAttributeValue(WellKnownAttributes.Contact.Email) ?? "Guest"; 
    
           Session["username"] = UserName; 
           Session["useremail"] = UserEmail; 
    
           Response.Redirect("Default2.aspx"); 
           break; 
    
          case AuthenticationStatus.Canceled: 
           lblAlertMsg.Text = "Cancelled."; 
           break; 
    
          case AuthenticationStatus.Failed: 
           lblAlertMsg.Text = "Login Failed."; 
           break; 
         } 
    
        } 
        var CommandArgument = "https://www.google.com/accounts/o8/id"; 
        string discoveryUri = CommandArgument.ToString(); 
        OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
    
        var url = new UriBuilder(Request.Url) { Query = "" }; 
        var request = openid.CreateRequest(discoveryUri); // This is where you would add any OpenID extensions you wanted 
        var fetchRequest = new FetchRequest(); // to fetch additional data fields from the OpenID Provider 
    
        fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
        fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First); 
        fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last); 
        fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.HomeAddress.Country); 
        request.AddExtension(fetchRequest); 
    
        request.RedirectToProvider(); 
        } 
    } 
    
    +0

    Das sieht so aus, als würde es die Kontakte des Benutzers abrufen? Ich möchte nur die E-Mail-Adresse des berechtigten Benutzers – CodingIntrigue

    +0

    berechtigten Benutzer ?? –

    +0

    Der über OAuth eingeloggte Benutzer – CodingIntrigue

    Verwandte Themen