[Share Experiences] 利用email-oauth2-proxy实现Deepin邮箱软件的OAuth2代理配置
Tofloor
default avatar
Oaklight
deepin
2025-01-08 10:29
Author

大家好,今天给大家分享一个在Deepin系统上配置邮箱OAuth2代理的方案,使用的是blacktirion/email-oauth2-proxy-docker这个Docker镜像。这个方案主要是为了解决Deepin Mail客户端目前尚未支持OAuth2协议的问题,通过代理的方式实现对Outlook/Office365邮箱的安全连接。

背景

目前,Deepin Mail客户端尚未原生支持OAuth2协议,而微软的Outlook/Office365邮箱在部分组织/企业/学校中已经强制要求使用OAuth2进行认证。这种情况下,传统的用户名和密码认证方式将无法使用,且无法通过创建个人Azure应用来绕过限制(因为强制OAuth2是由组织管理员在租户级别启用的)。为了在官方支持之前能够继续使用Deepin Mail,我们可以通过email-oauth2-proxy这个工具来实现兼容。希望Deepin官方能够尽快推动这一功能的开发,如果开发资源有限,也可以考虑开放源码让社区接手,毕竟这并不是特别复杂的功能。


1. 准备工作

首先,确保你的系统已经安装了Docker和Docker Compose。如果没有安装,可以参考官方文档进行安装。


2. Docker Compose配置

我们使用Docker Compose来部署这个服务。以下是我的docker-compose.yml文件内容:

services: emailproxy: image: blacktirion/email-oauth2-proxy-docker container_name: emailproxy network_mode: host restart: always volumes: - /dockervol/email_oauth2/config:/config # 按情况修改你的本地地址 environment: LOGFILE: true DEBUG: false CACHE_STORE: /config/credstore.config LOCAL_SERVER_AUTH: true `

3. 配置文件设置

接下来,我们需要在本地的映射文件夹内(比如我的/dockervol/email_oauth2/config)配置emailproxy.config文件,这个文件定义了代理服务的具体参数。我的配置文件如下:

[Server setup] [IMAP-1993] server_address = outlook.office365.com server_port = 993 local_address = 127.0.0.1 [SMTP-1587] server_address = smtp.office365.com server_port = 587 server_starttls = True local_address = 127.0.0.1 [your-outlook-email-address-in-full-can-be-either-personal-or-organization] permission_url = https://login.microsoftonline.com/common/oauth2/v2.0/authorize token_url = https://login.microsoftonline.com/common/oauth2/v2.0/token oauth2_scope = https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/POP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access redirect_uri = http://localhost client_id = 08162f7c-0fd2-4200-a84a-f25a4db0b584 client_secret = TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82

4. 启动服务

配置完成后,使用以下命令启动服务:

docker-compose up -d

5. 配置Deepin邮箱客户端

在Deepin的邮箱客户端中,将服务器地址设置为127.0.0.1,端口分别设置为config文件中IMAP的1993和SMTP的1587([IMAP-1993][SMTP-1587]),并关闭SSL。这样,邮箱客户端就会通过我们的OAuth2代理服务来连接Outlook/Office365邮箱服务器了。

图片.png


6. 验证与OAuth2授权

启动服务后,可以通过查看日志来验证是否配置成功:

docker logs emailproxy

如果一切正常,你应该能看到代理服务成功启动并监听到指定的端口。

注意[your-outlook-email-address-in-full-can-be-either-personal-or-organization]要修改成你真实的邮箱地址,与Deepin Mail设置的邮箱账号相同。

参考图片方式,进行手动设置。点击确定连接到你的Outlook/Office365邮箱时,第一次会连接失败。此时docker logs emailproxy会看到类似如下的内容:

2025-01-08 10:14:34: Authorisation request received for xxxxxxxxxxx (local server auth mode) 2025-01-08 10:14:34: Local server auth mode: please authorise a request for account xxxxxxxxxxx 2025-01-08 10:14:34: Authorisation result error for account xxxxxxxxxxx - aborting login. OAuth 2.0 authorisation response for account xxxxxxxxxxx is missing or does not match`redirect_uri` 2025-01-08 10:14:34: Please visit the following URL to authenticate account xxxxxxxxxxx: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=08162f7c-0fd2-4200-a84a-f25a4db0b584&redirect_uri=http%3A%2F%2Flocalhost&scope=https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All%20https%3A%2F%2Foutlook.office.com%2FPOP.AccessAsUser.All%20https%3A%2F%2Foutlook.office.com%2FSMTP.Send%20offline_access&response_type=code&access_type=offline&login_hint=xxxxxxxxxxx 2025-01-08 10:14:34,574: Accepting new connection from 127.0.0.1:47298 to IMAP server at 127.0.0.1:1993 (unsecured) proxying outlook.office365.com:993 (SSL/TLS)

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=08162f7c-0fd2-4200-a84a-f25a4db0b584&redirect_uri=http%3A%2F%2Flocalhost&scope=https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All%20https%3A%2F%2Foutlook.office.com%2FPOP.AccessAsUser.All%20https%3A%2F%2Foutlook.office.com%2FSMTP.Send%20offline_access&response_type=code&access_type=offline&login_hint=xxxxxxxxxxx 相似的链接URL完整拷贝到你的浏览器,进行OAuth2验证。通过之后,再次点击邮箱设置的确定,此时你应该能够成功连接并完成设置。


7. 关于Client ID和Client Secret

在配置文件中,client_idclient_secret是用于OAuth2认证的关键参数。这两个值来源于Thunderbird客户端,具体可以参考Reddit上的这篇帖子。Thunderbird使用这些值来与Microsoft的OAuth2服务进行通信。

需要注意的是,如果你的组织/企业/学校已经启用了强制OAuth2,那么你将无法通过创建个人Azure应用来绕过限制。这是因为强制OAuth2是由租户管理员在Azure AD中全局启用的,任何尝试使用传统密码认证的方式都会被拒绝。


8. 更多设置参考

如果你需要更详细的配置选项,可以参考simonrob/email-oauth2-proxy的GitHub仓库。这个配置文件提供了更多的设置选项,例如自定义缓存路径、日志级别、以及多邮箱账户的支持等。


总结

通过这个方案,我们成功地在Deepin系统上配置了一个OAuth2代理服务,使得Deepin Mail客户端可以通过OAuth2协议安全地连接Outlook/Office365邮箱。希望这个教程对大家有所帮助,同时也呼吁Deepin官方尽快推动对OAuth2协议的原生支持。如果开发资源有限,开放源码让社区接手也是一个不错的选择。

注意:在实际使用中,如使用个人的client_idclient_secret,则注意分享的时候不要泄露给他人。

祝大家使用愉快!也希望Deepin Mail能够早日支持OAuth2,让用户不再需要依赖第三方工具!

Reply Favorite View the author
All Replies

No replies yet