开发者社区> 问答> 正文

使用服务帐户对OAuth2进行Gmail身份验证

我需要在我的Gmail应用程序中实现OAuth2身份验证。应用程序在没有UI的后台运行。所以我有Google帐户(我认为这不是GSuite)。我按照此处的说明创建了服务帐户:https//www.emailarchitect.net/easendmail/sdk/html/object_oauth_service_account.htm (但未分配产品-我没有选择的权限。可能是因为我的帐户不是GSuite吗?之后,我使用JSON文件创建了用于JWT身份验证的密钥。我正在使用google-auth-library-oauth2-http库生成access_token并使用它登录到Gmail邮箱。这是令牌生成的代码片段:

GoogleCredentials credentials = ServiceAccountCredentials.fromStream(new FileInputStream("path_to_json")
                                     .createScoped(Arrays.asList("https://mail.google.com"));
credentials.refreshIfExpired();
AccessToken accessToken = credentials.getAccessToken();

AccessToken已成功检索,但是当我尝试将其用于邮箱身份验证时,我得到了javax.mail.AuthenticationFailedException: [AUTHENTICATIONFAILED] Invalid credentials (Failure)。

这是邮箱连接的代码片段:

Properties props = new Properties();
props.put("mail.imap.ssl.enable", "true");
props.put("mail.imap.auth.mechanisms", "XOAUTH2");
Session session = Session.getInstance(props);
Store store = session.getStore("imap");
store.connect("imap.gmail.com", "my_acc@gmail.com", access_token);

问题是,是否可以通过基于服务帐户数据生成的JWT使用访问令牌对gmail邮箱进行身份验证?可能吗

问题来源:Stack Overflow

展开
收起
montos 2020-03-28 09:23:56 1147 0
1 条回答
写回答
取消 提交回答
  • 您可以在不使用G Suite的情况下创建服务帐户,但是如果您要访问用户的Gmail收件箱,则需要使用“帐户范围内的委派”。如您在文档中所读:

    在企业应用程序中,您可能希望以编程方式访问用户的数据,而无需他们的任何手动授权。在G Suite 域中,域管理员可以授予第三方应用程序对其用户数据具有域范围的访问权限 -这称为域范围的授权。要以这种方式委派权限,域管理员可以将服务帐户与OAuth 2.0结合使用。

    回答来源:Stack Overflow

    2020-03-28 09:24:25
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
安全机制与User账户身份验证实战 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载