10
votes

Accéder aux informations utilisateur à l'aide de Google Apis pour .NET

J'utilise l'aperçu de Google APIS (1.7.0) pour autoriser un utilisateur via OAUTH2. Je suis en train de suivre le Exemple de code MVC . Ceci est ma mise en œuvre de flowmetadata : xxx

J'ai maintenant un userCredential et donc accéder à jeton, mais je ne trouve aucune API gérée. pour accéder aux informations utilisateur. J'ai trouvé Cette question , mais cela semble supposer que je ne fais que faire demandes plutôt que d'utiliser la bibliothèque officielle.

Comment puis-je obtenir l'adresse e-mail de l'utilisateur?


2 commentaires

Pouvez-vous poster le code de Statique privé IAuthorizationCodeFlowFlowFlowFlow = ...; // Mise en œuvre des jetons . En fait, je suis coincé à ce moment-là et ne pas avoir de solution. Voici lien à ma question


À l'heure actuelle, je reçois cette question. Ma question


4 Réponses :


1
votes

ici, je modifie ma réponse. S'il vous plaît examiner cela. Sur défaut2.aspx Page, je affiche la session ["Nom d'utilisateur"] et Session ["useremail"] valeur dans l'étiquette. J'espère que ceux-ci vous aideront pour vous.

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


6 commentaires

Cela ressemble à la récupération des contacts de l'utilisateur? Je veux seulement que l'adresse e-mail de l'utilisateur autorisé


L'utilisateur connecté via OAuth


Avez-vous utilisé le compte administrateur de Google ??


Clarifier. Je demande à l'utilisateur final d'autoriser ma candidature via Demande OAuth2 . J'aimerais que l'adresse e-mail de cet utilisateur.


Laissez-nous Continuer cette discussion en chat


@RGRAHAM Dans cette solution, l'utilisateur sera authentifié via OAuth puis je récupère le courrier électronique des addics. J'espère que je suis Wright.



2
votes

Définissez vos étendues sur:


0 commentaires

21
votes

Vous devriez faire ce qui suit:

  1. En plus de Google.APis.Auth Nuget Package Vous devez installer la page suivante: https : //www.nuget.org/packages/google.apis.oauth2.v2 P> LI>

  2. Ajouter google.apis.oauth2.v2.oauth2service.scope.userinfoprofile strong> et aussi google.apis.oauth2.v2.oauth2service.scope.userinfoemail strong> à la liste des scopes (lorsque vous initialisez l'Appflowmetadata). P> LI>

  3. maintenant, ajoutez le code suivant: p> li> ol>

    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, ... 
    }
    


3 commentaires

Bon travail. Seul un ajustement mineur que j'ai fait à votre réponse était d'ajouter le google.apis.oauth2.v2.oauth2service.scope.userinfoemail Portée :)


Qu'en est-il des diplômes?


@ Sebastiánrojas Résultat.Credential



0
votes

Code complet pour obtenir des données userProfile.

var secrect = new ClientSecrets()
{
    ClientId = "myClientId",
    ClientSecret = "mySecret"
};

var scopes = new[] { Oauth2Service.Scope.UserinfoEmail, auth2Service.Scope.UserinfoProfile };

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secrect, scopes, "user", CancellationToken.None).Result;
    
var oauthSerivce = new Oauth2Service(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "MyApplicationName",
});

var userInfo = oauthSerivce.Userinfo.Get().Execute();


0 commentaires