我正在开发一个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中的某个地方获取它吗?
答案 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";
我不确定这是否是正确的解决方案, 但它正在我的项目中工作
刚刚提供给你参考。
顺便问一下,您是否解决了将服务器与令牌连接的问题?
感谢您对我有一些好的建议,谢谢。