使用OAuth2认证结合EWS实现实时读取邮件功能

这篇具有很好参考价值的文章主要介绍了使用OAuth2认证结合EWS实现实时读取邮件功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

公司之前有一个进行邮件获取的功能,使用ExchangeService+TLS1.2认证的方式,但是由于微软将要将这种认证方式列为Legacy authentication,且将在2022年10月下载该认证方式。因此将尝试使用OAuth+EWS这种认证的方式。别问问啥必须用微软系的功能,问就是公司硬性要求。

如下为更改通知:

Stop legacy authentication:

Microsoft have announced that Exchange online – will stop allowing legacy authentication from October 2022

I am writing to you – because you are registered as owner of an account used for legacy authentication. (Legacy authentication is basically using username / password for authentication)

Reason

The reason why Microsoft  choose to remove support is Legacy authentication is that it considered insecure and added a risk to XXXXXXXXXXXX for password spray attacks.

Information

The spreadsheet included is also published here and general information on changes in the cloud: Information on changes in Azure for developers and on-line services (sharepoint.com)

The notification from Microsoft: Basic Authentication and Exchange Online – September 2021 Update - Microsoft Tech Community

Near Future

It is planned to block Legacy Authentication for new systems – in very near future.

开始之前,先看一下下文中Delegated权限和Application权限的区别:

使用 OAuth 对 EWS 应用程序进行身份验证

一、使用OAuth2认证申请

1、申请AppID,tenantID

管理员在AAD(Azure Active Directory)进行App 注册。注册完毕之后会生产Application (client) ID(APPID)和一个Directory (tenant) ID (租户ID)

使用OAuth2认证结合EWS实现实时读取邮件功能

使用OAuth2认证结合EWS实现实时读取邮件功能

 2、申请secrets

按照如下图步骤,

注意:

        1、在选择过期日期时,默认为6个月,可手动修改为24个月

        2、生产的Value值只会在首次添加完成之后出现,所以添加完成之后,将步骤2中Value值保存下来

使用OAuth2认证结合EWS实现实时读取邮件功能

 

 3、添加授权权限

 点击左侧的API Permission 链接,添加如下的权限

  注意:如果你是管理员,那么你可以添加Application类型的权限,否则你只能添加Delegation类型的权限

使用OAuth2认证结合EWS实现实时读取邮件功能

二、Policy授权

需要EWS的管理原将你要获取的邮箱地址配置到EWS服务器中,将应用程序权限限制为特定 Exchange Online 邮箱

可参考:添加特定邮箱地址的ApplicationAccessPolicy

授权完毕之后,进行查看,如出现如下内容,则表示添加完毕。

使用OAuth2认证结合EWS实现实时读取邮件功能

 三、C#代码编写

1、Config文件配置第一步骤中生成的三个ID

<!-- The application ID from your app registration -->
<add key="appId" value="{{YOUR APP ID}}" />
<!-- The tenant ID copied from your app registration -->
<add key="tenantId" value="{{YOUR TENANTID}}"/>
<!-- The application's client secret from your app registration. Needed for application permission access -->
<add key="clientSecret" value="{{YOUR SECRET ID}}"/>

2、代码执行逻辑

using Microsoft.Exchange.WebServices.Data;
using Microsoft.Identity.Client;
using Quartz;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; 

public async System.Threading.Tasks.Task GetEmailByOAuth()
 {
var cca = ConfidentialClientApplicationBuilder
                .Create(ConfigurationManager.AppSettings["appId"])
                .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"])
                .WithTenantId(ConfigurationManager.AppSettings["tenantId"])
                .Build();

            var ewsScopes = new string[] { "https://outlook.office365.com/.default" };

           
                var authResult = await cca.AcquireTokenForClient(ewsScopes).ExecuteAsync();

                var ewsClient = new ExchangeService();
                ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
                ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
                ewsClient.ImpersonatedUserId =
                    new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "{{你将要访问的邮箱地址,注意该地址必须是第二步骤中添加Policy中的地址,否则会提示403,禁止访问}}");

                ewsClient.HttpHeaders.Add("X-AnchorMailbox", "{{你将要访问的邮箱地址,注意该地址必须是第二步骤中添加Policy中的地址,否则会提示403,禁止访问}}");

                int offset = 0;
                int pageSize = 100;
                bool more = true;
                ItemView itemViews = new ItemView(pageSize, offset);

                PropertySet itemPorpertySet = new PropertySet(BasePropertySet.FirstClassProperties,
                    EmailMessageSchema.MimeContent);
                //获取邮箱中的文件夹,如:收件箱,草稿箱,日历等等
                //var findFolders = ewsClient.FindFolders(WellKnownFolderName.MsgFolderRoot, SetFilter(), view);


                //获取收件箱中的具体邮件内容
                FindItemsResults<Item> findResults = ewsClient.FindItems(WellKnownFolderName.Inbox, SetFilter(), itemViews);
}

3、测试

当如上代码执行到最下面一行,如果验证findResults.Items.Count()>0,则验证成功,表示可正常获取邮箱地址中的邮件内容。至此,邮件审批功能修改完毕。

四、总结

以上步骤都是一个坑一个坑趟出来的,只写了正常执行的情况,当然,在正常从头开始做的时候,肯定会遇到很多的问题,都没有单独的列出来,如果读者也在使用这种方式,途中也遇到了各种各样的问题,请看官老爷留言,咱么一起学习,一起进步文章来源地址https://www.toymoban.com/news/detail-460807.html

到了这里,关于使用OAuth2认证结合EWS实现实时读取邮件功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud整合spring security+ oauth2+Redis实现认证授权

    在微服务构建中,我们一般用一个父工程来通知管理依赖的各种版本号信息。父工程pom文件如下: 在SpringCloud微服务体系中服务注册中心是一个必要的存在,通过注册中心提供服务的注册和发现。具体细节可以查看我之前的博客,这里不再赘述。我们开始构建一个eureka注册中

    2024年02月06日
    浏览(42)
  • oauth2.0第2季 分布式认证与授权实现单点登录

    1.使用jwttoken进行令牌传输,资源服务器在本地怎么验证token? 1.1.1 oauth是什么 1.1.2 oauth的角色 1.1.3 oauth的认证流程 1.1.4 oauth的4种模式 1.介绍单体架构  使用sesion保存会话信息的情况 2.前后端分离项目,调用方式 session架构不适合前后端分离项目 3.解决办法,引出oauth2.0 配置

    2024年02月11日
    浏览(36)
  • Spring Gateway+Security+OAuth2+RBAC 实现SSO统一认证平台

    背景:新项目准备用SSO来整合之前多个项目的登录和权限,同时引入网关来做后续的服务限流之类的操作,所以搭建了下面这个系统雏形。 : Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Javax, thymeleaf 如果对上面这些技术感兴趣,可以继续往下阅读 如

    2024年02月13日
    浏览(38)
  • Gateway+Springsecurity+OAuth2.0+JWT 实现分布式统一认证授权!

    目录 1. OAuth2.0授权服务 2. 资源服务 3. Gateway网关 4. 测试   在SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心-CSDN博客 ​​​​​​ 基础上整合网关和JWT实现分布式统一认证授权。   大致流程如下: 1、客户端发出请求给网关获取令牌 2、网关收到请求,直接转发给授权服务

    2024年01月24日
    浏览(41)
  • 开放平台实现安全的身份认证与授权原理与实战:学习OAuth2.0之PKCE

    随着互联网的不断发展,我们的生活中越来越多的服务都需要我们的身份认证和授权。例如,我们在使用某些网站或应用程序时,需要通过账号和密码进行身份认证,以便于保护我们的个人信息和数据。同时,当我们使用某些第三方应用程序时,这些应用程序需要我们授权访

    2024年04月16日
    浏览(24)
  • 开放平台实现安全的身份认证与授权原理与实战:整理OAuth2.0各种开发指南

    OAuth 2.0 是一种基于标准 HTTP 的身份验证和授权机制,它允许用户授予第三方应用程序访问他们在其他服务(如社交网络、电子邮件服务器或云存储服务)的数据。OAuth 2.0 的目标是提供一种简化的方法,使得用户可以安全地授予第三方应用程序访问他们的数据,而无需将他们的密

    2024年04月27日
    浏览(31)
  • OAuth2认证流程

    目录 什么是OAuth2 1. OAuth2认证流程 1、用户点击微信扫码 2、用户授权黑马网站访问用户信息 3、黑马程序员的网站获取到授权码 4、携带授权码请求微信认证服务器申请令牌 5、微信认证服务器向黑马程序员的网站响应令牌 6、黑马程序员网站请求微信资源服务器获取资源即用

    2024年02月16日
    浏览(37)
  • 18.Oauth2-微服务认证

    OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务,通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源,或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解,可以想象OAuth2.0就是在用户资源和第三方应用之间的一个中间层

    2024年02月10日
    浏览(32)
  • 17.Oauth2-微服务认证

    OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务,通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源,或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解,可以想象OAuth2.0就是在用户资源和第三方应用之间的一个中间层

    2024年02月10日
    浏览(29)
  • javamail微软邮箱imap协议使用oauth2.0认证--微软邮箱中国版(21v世纪互联运营的微软邮箱)

    使用微软国际版的看:javamail微软邮箱imap协议使用oauth2.0认证–微软邮箱国际版 imap协议使用oauth2.0身份认证,必须先对帐号进行授权,授权方式可以看我之前的文章:微软邮箱oath2协议下,使用imap协议时对账号授权,如果不进行授权,即使认证通过了,但是获取邮件相关文件

    2024年04月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包