对邮件服务的 OAuth2 支持 oauth2-support-for-the-mail-service

AEM as a Cloud Service 提供对其集成的邮件服务的 OAuth2 支持,以便各组织能够遵守安全电子邮件要求。

您可以为多个电子邮件提供商配置 OAuth。以下分步说明针对在 Microsoft® Office 365 Outlook 中配置 AEM 邮件服务以通过 OAuth2 进行身份验证。可通过类似方式配置其他供应商。

有关 AEM as a Cloud Service 邮件服务的更多信息,请参阅发送电子邮件

Microsoft® Outlook microsoft-outlook

  1. 转至 https://portal.azure.com/ 并登录。

  2. 在搜索栏中搜索 Azure Active Directory,并单击搜索结果。或者,您可以直接浏览到 https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview

  3. 单击​ 应用程序注册 > 新的注册。

    开始应用程序注册过程

  4. 根据您的要求填写信息,然后单击​ 注册。

  5. 转至所创建的应用程序,并选择 API 权限

  6. 单击​ 添加权限 > 图表权限 > 委派权限。

  7. 为应用程序选择以下权限,然后单击​ 添加权限

    note note
    NOTE
    权限配置可能会逐渐演变。如果这些操作无法发挥预期的作用,请与 Microsoft® 合作解决。
    • https://outlook.office.com/SMTP.Send
    • openid
    • offline_access
    • email
    • profile
  8. 转至​ 身份验证 > 添加平台 > Web,然后在​ 重定向 URL 部分中,添加以下 URL - 一个带正斜杠,一个不带正斜杠:

    • http://localhost/
    • http://localhost
  9. 在添加每个 URL 后按​ 配置,然后根据您的要求配置设置。

  10. 接下来,转至​ 证书和密码,单击​ 新建客户端密码,然后执行屏幕上显示的步骤来创建密码。请务必记下此密码供以后使用。

  11. 按左窗格中的​ 概述,复制​ 应用程序(客户端)ID 和​ 目录(租户)ID 的值供以后使用。

回顾一下,使用以下信息为 AEM 端的邮件服务配置 OAuth2:

  • 使用租户 ID 构建的身份验证 URL。它的形式是:https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/authorize
  • 使用租户 ID 构建的令牌 URL。它的形式是:https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
  • 使用租户 ID 构建的刷新 URL。它的形式是:https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
  • 客户端 ID
  • 客户端密码

生成刷新令牌 generating-the-refresh-token

接下来,通过以下操作生成刷新令牌,这是后续步骤中的 OSGi 配置的一部分。

  1. clientIDtenantID 替换为您的帐户特有的值后,在浏览器中打开以下 URL:

    code language-none
    https://login.microsoftonline.com/%3ctenantID%3e/oauth2/v2.0/authorize?client_id=%3cclientId%3e&response_type=code&redirect_uri=http://localhost&response_mode=query&scope=https://outlook.office.com/SMTP.Send%20email%20openid%20profile%20offline_access&state=12345`
    
  2. 当询问您时,请允许权限。

  3. 该 URL 重定向到采用此格式的新位置:

    code language-none
    http://localhost/?code=<code>&state=12345&session_state=4f984c6b-cc1f-47b9-81b2-66522ea83f81#`
    
  4. 复制上述示例中的 <code> 的值。

  5. 使用以下 cURL 命令获取 refreshToken。将 tenantID、clientID 和 clientSecret 替换为您帐户的值以及 <code> 的值:

    code language-none
    curl --location --request POST 'https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --header 'Cookie: buid=0.ARgAep0nU49DzUGmoP2wnvyIkcQjsx26HEpOnvHS0akqXQgYAAA.AQABAAEAAAD--DLA3VO7QrddgJg7Wevry9XPJSKbGVlPt5NWYxLtTl3K1W0LwHXelrffApUo_K02kFrkvmGm94rfBT94t25Zq4bCd5IM3yFOjWb3V22yDM7-rl112sLzbBQBRCL3QAAgAA; esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevr4a8wBjYcNbBXRievdTOd15caaeAsQdXeBAQA3tjVQaxmrOXFGkKaE7HBzsJrzA-ci4RRpor-opoo5gpGLh3pj_iMZuqegQPEb1V5sUVQV8_DUEbBv5YFV2eczS5EAhLBAwAd1mHx6jYOL8LwZNDFvd2-MhVXwPd6iKPigSuBxMogAA; x-ms-gateway-slice=estsfd; stsservicecookie=estsfd; fpc=Auv6lTuyAP1FuOOCfj9w0U_5vR5dAQAAALDXP9gOAAAAwIpkkQEAAACT2T_YDgAAAA' \
    --data-urlencode 'client_id=<clientID>' \
    --data-urlencode 'scope=https://outlook.office.com/SMTP.Send https://graph.microsoft.com/Mail.Read https://graph.microsoft.com/Mail.Send https://graph.microsoft.com/User.Read email openid profile offline_access' \
    --data-urlencode 'redirect_uri=http://localhost' \
    --data-urlencode 'grant_type=authorization_code' \
    --data-urlencode 'client_secret=<clientSecret>' \
    --data-urlencode 'code=<code>'
    
  6. 记下 refreshToken 和 accessToken。

验证令牌 validating-the-tokens

继续在 AEM 端配置 OAuth 之前,确保使用以下过程验证 accessToken 和 refreshToken:

  1. 通过使用以下 curl,使用前面过程中生成的 refreshToken 生成 accessToken,替换 <client_id><client_secret><refreshToken>

    code language-none
    curl --location --request POST 'https://login.microsoftonline.com/<tenetId>/oauth2/v2.0/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --header 'Cookie: buid=0.ARgAep0nU49DzUGmoP2wnvyIkcQjsx26HEpOnvHS0akqXQgYAAA.AQABAAEAAAD--DLA3VO7QrddgJg7Wevry9XPJSKbGVlPt5NWYxLtTl3K1W0LwHXelrffApUo_K02kFrkvmGm94rfBT94t25Zq4bCd5IM3yFOjWb3V22yDM7-rl112sLzbBQBRCL3QAAgAA; esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevr4a8wBjYcNbBXRievdTOd15caaeAsQdXeBAQA3tjVQaxmrOXFGkKaE7HBzsJrzA-ci4RRpor-opoo5gpGLh3pj_iMZuqegQPEb1V5sUVQV8_DUEbBv5YFV2eczS5EAhLBAwAd1mHx6jYOL8LwZNDFvd2-MhVXwPd6iKPigSuBxMogAA; x-ms-gateway-slice=estsfd; stsservicecookie=estsfd; fpc=Auv6lTuyAP1FuOOCfj9w0U_IezHLAQAAAPeNSdgOAAAA' \
    --data-urlencode 'client_id=<client_id>' \
    --data-urlencode 'scope=https://outlook.office.com/SMTP.Send https://graph.microsoft.com/Mail.Read https://graph.microsoft.com/Mail.Send https://graph.microsoft.com/User.Read email openid profile offline_access' \
    --data-urlencode 'redirect_uri=http://localhost' \
    --data-urlencode 'grant_type=refresh_token' \
    --data-urlencode 'client_secret=<client_secret>' \
    --data-urlencode 'refresh_token=<refreshToken>'
    
  2. 使用 accessToken 发送邮件以查看它是否正常运行。

NOTE
您可以从此位置获取 Postman API 收藏集。
请在此处查看 MSFT OAuth 文档,以获取更多详细信息。

与 AEM as a Cloud Service 集成 integration-with-aem-as-a-cloud-service

  1. 使用以下语法在 /apps/<my-project>/osgiconfig/config 下创建名为 com.day.cq.mailer.oauth.impl.OAuthConfigurationProviderImpl.cfg.json 的 OSGI 属性文件:

    code language-none
    {
        authUrl: "<Authorization Url>",
        tokenUrl: "<Token Url>",
        clientId: "<clientID>",
        clientSecret: "$[secret:SECRET_SMTP_OAUTH_CLIENT_SECRET]",
        scopes: [
           "scope1",
           "scope2"
        ],
        authCodeRedirectUrl: "http://localhost",
        refreshUrl: "<Refresh token Url>",
        refreshToken: "$[secret:SECRET_SMTP_OAUTH_REFRESH_TOKEN]"
    }
    
  2. 填写 authUrltokenUrlrefreshURL,方式是按上一部分所述来构造它们。

  3. 将以下范围添加到配置:

    note note
    NOTE
    范围可能会逐渐演变。如果这些操作无法发挥预期的作用,请与 Microsoft® 合作解决。
    • https://outlook.office.com/SMTP.Send
    • openid
    • offline_access
    • email
    • profile
  4. 用以下语法在 /apps/<my-project>/osgiconfig/config 下创建一个名为 called com.day.cq.mailer.DefaultMailService.cfg.json 的 OSGI 属性文件。smtp.hostsmtp.port 值反映了高级网络配置,如电子邮件服务教程中所述。

    code language-none
    {
     "smtp.host": "$[env:AEM_PROXY_HOST;default=proxy.tunnel]",
     "smtp.user": "<user account that logged into get the oauth tokens>",
     "smtp.password": "value not used",
     "smtp.port": 30465,
     "from.address": "<from address used for sending>",
     "smtp.ssl": false,
     "smtp.starttls": true,
     "smtp.requiretls": true,
     "debug.email": false,
     "oauth.flow": true
    }
    
  5. 对于 Outlook,smtp.host 配置值为 smtp.office365.com

  6. 在运行时,如此处所述的那样使用 Cloud Manager 变量 API 传入 refreshToken valuesclientSecret 密钥,或通过使用 Cloud Manager 添加变量而传入。应定义变量 SECRET_SMTP_OAUTH_REFRESH_TOKENSECRET_SMTP_OAUTH_CLIENT_SECRET 的值。

疑难解答 troubleshooting

如果邮件服务无法正常运行,您需要重新生成 refreshToken(如上所述),并通过 Cloud Manager API 传入新值。部署新值需要花费几分钟的时间。

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab