gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:53:07 25 4
gpt4 key购买 nike

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

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] 凭据无效(失败)

以下是邮箱连接的代码片段:

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 使用访问 token 对 Gmail 邮箱进行身份验证?这可能吗?

最佳答案

您可以在不使用 G Suite 的情况下创建服务帐号,但如果您想要访问用户的 Gmail 收件箱,则确实需要它才能使用“域范围委托(delegate)”。正如您可以在 documentation 中读到的那样:

In enterprise applications you may want to programmatically access a user's data without any manual authorization on their part. In G Suite domains, the domain administrator can grant third-party applications with domain-wide access to its users' data — this is known as domain-wide delegation of authority. To delegate authority this way, domain administrators can use service accounts with OAuth 2.0.

关于java - 使用服务帐户对 Gmail 进行 OAuth2 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60656826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com