如何获取userId参数以调用ExchangeCodeForTokenAsync

时间:2014-12-10 16:47:47

标签: .net google-chrome-extension google-oauth gmail-api

我正在开发一个Chrome扩展程序,可以调用.NET应用程序。在该.NET应用程序中,我使用Gmail API来管理和阅读已登录用户的电子邮件。

我遵循了Google提供的here .NET API示例。在该示例中,有一个如下所示的局部变量:

    // Application logic should manage users authentication. 
    // This sample works with only one user. You can change
    // it by retrieving data from the session.
    private const string UserId = "user-id";

有很多方法可以将此变量用作参数:

var oauthState = AuthWebUtility.ExtracRedirectFromState( flow.DataStore, UserId,...

var token = flow.ExchangeCodeForTokenAsync(UserId,...

var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId,...

我的问题是:如何获得UserId?我应该从会议中得到它吗?我应该从chrome.storage中的某个地方获取它吗?

2 个答案:

答案 0 :(得分:1)

您可以从会话中获取用户ID。这是同一个link

public override string GetUserId(Controller controller)
    {
             // In this sample we use the session to store the user identifiers.
            // That's not the best practice, because you should have a logic to identify
           // a user. You might want to use "OpenID Connect".
        // You can read more about the protocol in the following link:
        // https://developers.google.com/accounts/docs/OAuth2Login.
        var user = controller.Session["user"];
        if (user == null)
        {
            user = Guid.NewGuid();
            controller.Session["user"] = user;
        }
        return user.ToString();

    }

但是,最佳做法是使用Google+ sign in进行身份验证。当用户登录后,您会获得OAuth令牌以代表他们发出API请求,您可以使用这些令牌来更好地了解您的用户。如果您有任何问题,请告诉我。

答案 1 :(得分:0)

我最近也在努力。

确保在首次重定向到Google时包含正确的范围:

https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email

然后你只需要为它声明一个类似

的字符串
private const string UserId = "user-id";

我不确定这是否是正确的解决方案, 但它正在我的项目中工作

刚刚提供给你参考。

顺便问一下,您是否解决了将服务器与令牌连接的问题?

感谢您对我有一些好的建议,谢谢。