我正在制作一个需要访问Office 365 Calendar的内容的应用程序.
该应用程序不需要直接的用户操作来登录和检索其数据,因此我无法使用标准OAuth方式来获取此令牌.

我有点熟悉谷歌的日历方式来做到这一点,它是“服务帐户”的逻辑,涉及一个非对称的RSA密钥来做,所以我试图找到类似这样的O365.

我发现这个博客:
https://blogs.msdn.microsoft.com/arsen/2015/09/18/certificate-based-auth-with-azure-service-principals-from-linux-command-line/
这帮助我很多配置应用程序,并设置两边的所有键以允许连接.最后,我设法使它工作,得到一个令牌并列出资源组.

一切都很好,我使用Microsoft Graph API很容易地工作.
所以:
– 我在应用程序的Azure管理授权中添加了Microsft Graph API,并将所有用户日历的所有读/写权限(在应用程序的授权和委派授权中)
– 我重新生成了令牌,所以可以添加新的权限
– 我使用这个令牌获取日历的列表

而且从未奏效我有令牌,请求给我很好的范围.所以我知道我在正确的应用程序,一切.当我将令牌提供给outlook.office.com时,我有以下消息:<>

我可能错过了一个地方,但我找不到哪里.在我的要求在我的Azure帐户?

有什么帮助吗

请求(没有模糊任何东西,只是一个测试帐户).

获取令牌请求:

POST /6a23b9c1-04fc-4782-b08c-786d2a16c95d/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: f7b2884d-44e9-c48a-6245-453be490758c

grant_type=client_credentials&client_id=0577ff63-730e-418a-a68f-6cbc590b6874&resource=https%3A%2F%2Foutlook.office.com%2F&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1dCI6ImxhVkMzbed3K3hKWkpkTUQrbUpmdmRoU1V2bz0ifQ.eyJhdWQiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubgluZS5jb20vNmEyM2I5YzEtMDRmYy00NzgyLWIwOGMtNzg2ZDJhMTZjOTVkL29hdXRoMi90b2tlbiIsImlzcyI6IjA1NzdmZjYzLTczMGUtNDE4YS1hNjhmLTZjYmM1OTBiNjg3NCIsInN1YiI6IjA1NzdmZjYzLTczMGUtNDE4YS1hNjhmLTZjYmM1OTBiNjg3NCIsImp0aSI6IjAuMTgyOTg1ODUzNjM2NjM3MzMiLCJuYmYiOiIxNDYxOTQyODU2IiwiZXhwIjoiMTUyMjQyMzg1NiIsImlhdCI6MTQ2MTk0Mzg1Nn0.Czm9ks_jrEVViUDjfMF1uVUlf5sZrCSGtCmisFn3c8119KQ-OczLpWbpU3crJjidiP2y-xcSGjRSCGYJPiwq2Qks45_97-jBe_fBPoJb5lni5QYT_2ep6OyaAnId4VxlF9WScxFfhetLqOsqOZwB4c6_YXdOiy82SJ0sLqLgZrFlnqYn6uMXGWThEFKPR3qsolgO4Wn5lthFRwF__iuipg2DnjyNIz2KVhqVLqqZ-pglzE_soaKldiAR4bAZMxlndhMCnoUADgfsR0PAaZ-AyM0me4K7FrGbLpaTdXU6M4v9edLM9J23dg82HOKdf0GDC6pCIxKmIsuTR8IxGfxoTw

获取令牌答案:

{
    "token_type" : "Bearer","scope" : "Calendars.Read Calendars.ReadWrite","expires_in" : "3600","expires_on" : "1461951871","not_before" : "1461947971","resource" : "https://outlook.office.com/","access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbS8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC82YTIzYjljMS0wNGZjLTQ3ODItYjA4Yy03ODZkMmExNmM5NWQvIiwiaWF0IjoxNDYxOTQ3OTcxLCJuYmYiOjE0NjE5NDc5NzEsImV4cCI6MTQ2MTk1MTg3MSwiYXBwaWQiOiIwNTc3ZmY2My03MzBlLTQxOGEtYTY4Zi02Y2JjNTkwYjY4NzQiLCJhcHBpZGFjciI6IjIiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC82YTIzYjljMS0wNGZjLTQ3ODItYjA4Yy03ODZkMmExNmM5NWQvIiwib2lkIjoiMGQyODJlMDgtZGZkOC00Y2YwLWJmYzMtYmQ2MDZmMDEyNzVhIiwic3ViIjoiMGQyODJlMDgtZGZkOC00Y2YwLWJmYzMtYmQ2MDZmMDEyNzVhIiwidGlkIjoiNmEyM2I5YzEtMDRmYy00NzgyLWIwOGMtNzg2ZDJhMTZjOTVkIiwidmVyIjoims4wIn0.L8mP4t_Zmxfl5vJQwEaOsd-ere81jtz9ltzxk0TA0qA_hwRIYNVmHrydyPTHHQC7Jv3M6hiSnSVyVeXX_uYNFkPRZ3Sy_XOjmOF5xslMrw1niqE6J7OhQ5PEPmOfa0mQoWManChemDV5JCdxNOotBd4xes_jzg9tLMihzpqBcAUo3zGn8q5PT7AG-pydoeaHCWwDSKlHlFkBjZ3y_NTtQadDSR9aE2H6DOtP5-hXCpHqzkZODTZCuSBQRz1vCshcd8kZiuX_ebxItlJ8JU-zUr1YJFy9jww0NtROOB71xJP9IUf2NjMS-rQvR2qL8vfLPTArpgQFRU9cCZ4KpbVs3Q"
}

日历列表请求:

GET /api/v2.0/me/calendars HTTP/1.1
Host: outlook.office.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbS8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC82YTIzYjljMS0wNGZjLTQ3ODItYjA4Yy03ODZkMmExNmM5NWQvIiwiaWF0IjoxNDYxOTQ3OTcxLCJuYmYiOjE0NjE5NDc5NzEsImV4cCI6MTQ2MTk1MTg3MSwiYXBwaWQiOiIwNTc3ZmY2My03MzBlLTQxOGEtYTY4Zi02Y2JjNTkwYjY4NzQiLCJhcHBpZGFjciI6IjIiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC82YTIzYjljMS0wNGZjLTQ3ODItYjA4Yy03ODZkMmExNmM5NWQvIiwib2lkIjoiMGQyODJlMDgtZGZkOC00Y2YwLWJmYzMtYmQ2MDZmMDEyNzVhIiwic3ViIjoiMGQyODJlMDgtZGZkOC00Y2YwLWJmYzMtYmQ2MDZmMDEyNzVhIiwidGlkIjoiNmEyM2I5YzEtMDRmYy00NzgyLWIwOGMtNzg2ZDJhMTZjOTVkIiwidmVyIjoims4wIn0.L8mP4t_Zmxfl5vJQwEaOsd-ere81jtz9ltzxk0TA0qA_hwRIYNVmHrydyPTHHQC7Jv3M6hiSnSVyVeXX_uYNFkPRZ3Sy_XOjmOF5xslMrw1niqE6J7OhQ5PEPmOfa0mQoWManChemDV5JCdxNOotBd4xes_jzg9tLMihzpqBcAUo3zGn8q5PT7AG-pydoeaHCWwDSKlHlFkBjZ3y_NTtQadDSR9aE2H6DOtP5-hXCpHqzkZODTZCuSBQRz1vCshcd8kZiuX_ebxItlJ8JU-zUr1YJFy9jww0NtROOB71xJP9IUf2NjMS-rQvR2qL8vfLPTArpgQFRU9cCZ4KpbVs3Q
Cache-Control: no-cache
Postman-Token: e85ac526-c56a-4d5b-2f74-83f4033decb4

答案为空,但在标题中:

Content-Length →0
Date →Fri,29 Apr 2016 16:44:59 GMT
Server →Microsoft-IIS/8.5
WWW-Authenticate →Bearer client_id="00000002-0000-0ff1-ce00-000000000000",trusted_issuers="00000001-0000-0000-c000-000000000000@*",token_types="app_asserted_user_v1 service_asserted_app_v1",authorization_uri="https://login.windows.net/common/oauth2/authorize",error="invalid_token",Basic Realm="",Basic Realm=""
X-BEServer →VI1PR08MB0910
X-BackEndHttpStatus →401
X-CalculatedBETarget →VI1PR08MB0910.eurprd08.prod.outlook.com
X-DiagInfo →VI1PR08MB0910
X-FEServer →AM3PR08CA0034
X-MSEdge-Ref →Ref A: B612166BB1764A45B0F3BCE6DF9CB639 Ref B: A8D71806CB57091B57FD0130AABF9D85 Ref C: Fri Apr 29 09:45:00 2016 PST
X-Powered-By →ASP.NET
request-id →26f132ca-df5e-439f-bd4f-7d655ba7df21
x-ms-diagnostics →2000008;reason="The token contains no permissions,or permissions can not be understood.";error_category="invalid_grant"

解决方法

有关如何使用REST API应用程序访问的说明,请查看博客文章 Building Daemon or Service Apps with Office 365 Mail,Calendar,and Contacts APIs (OAuth2 client credential flow).由于博客文章很旧,请将outlook.office365.com/api/v1.0替换为outlook.office.com/api/v2.0.您还可以按照相同的步骤注册您的应用程序,以获得适用于Microsoft Graph的应用程序访问权限.

javascript – 获取O365日历的授权令牌的更多相关文章

  1. 使用VBA从Outlook AddressBook中的项目获取别名

    我下面的代码在Debug.Print中显示以下错误,原因是什么?

  2. EWS-Outlook的字符参考问题

    您好,我们正在尝试通过EWS通过java代码访问outlook电子邮件。对于某些电子邮件,我们面临字符引用问题。

  3. microsoft-graph – 无法访问Microsoft Graph API中的/ outlook / masterCategories端点

    似乎任何以/outlook开头的端点都会返回此错误:我已经授权范围mail.readuser.readmailBoxsettings.readwrite所以我应该能够访问用户的收件箱类别,但是这个帖子中提到的以“outlook”开头的betaAPI端点:https://blogs.msdn.microsoft.com/exchangedev/2017/10/09/new-outlook-apis-

  4. 使用php脚本将事件添加到Outlook日历

    我想从PHP代码向outlook日历添加事件.由于outlook可以接受扩展名为“.ics”的文件,因此我尝试使用此示例代码生成一个ics文件:所以现在当我在Firefox中运行此代码时,我得到一个弹出窗口,要求使用MicrosoftOutlook打开生成的ics文件,然后打开它并将其保存到Outlook,最后在Outlook中添加了一个事件.但有没有办法让这个过程自动化?我的意思是,我可以直接从PHP脚本将事件存储在Outlook日历中,而无需生成ics文件并保存吗?

  5. php – 从网页上的链接添加Outlook日历事件

    任何人都知道如何添加锚点到网页,将强制Outlook日历文件下载?我需要文件打开OutlookOutlook和日历信息添加到用户的日历.如何创建MSOutlook的日历文件?是否有标准/记录的方式,我可以使用脚本/自动化方式创建这些日历文件?谢谢–创建一个outlook.ics文件有关详细信息,请参阅here.例子在.NET中,但它只是编写输出,因此很容易翻译成PHP.

  6. windows-server-2008-r2 – 图形故障 – 作为远程应用程序的2008 R2远程桌面服务器上的Outlook 2013

    Server2008R2SP1,带有远程桌面服务.Office2013.[编辑:大多数]已安装Microsoft更新.将Outlook发布为RemoteApp,并从Windows8客户端运行它,然后打开电子邮件.这是怎么回事:>电子邮件会打开并简要呈现,但Outlook收件箱会通过电子邮件部分显示.>大多数电子邮件都是隐形的,就好像它是在后台一样,除了边框仍然像浮雕印记一样可见.>部分不可见的电子

  7. 每当用户更改密码时,Microsoft Outlook都会询问密码

    我有10000个用户使用不同的OU,组.我们有一个Windows2008AD服务器和一个Exchange2010邮件服务器.客户端使用的是Windows764位操作系统和Outlook32位.每当用户更改密码时,即使用户输入了正确的凭据,Outlook和Lyncs也会继续提示用户输入密码.这会导致帐户锁定问题.因此,我们面临着大量的门票.我们现在正在做的是重新启动计算机并从保管库中删除保存的密码.有人有替代解决方案吗?

  8. microsoft-office-365 – Office 365 – Outlook在会议请求期间显示全局地址列表,单击“房间”

    这似乎是一个“已知”的问题,但显然没有解决它.然而,在这里专家坚韧不拔地想出答案/解决之前,我一直留下了深刻的印象.问题在Outlook(2013或2010)中预订新会议并选择“房间”按钮时:打开的默认列表是脱机全局地址列表:这意味着用户必须从离线全局地址列表更改为所有房间列表,如此处所示,以便从实际房间/资源列表中轻松选择:但是,对于On-PremiseExchange服务器,这不是默认设置.单

  9. active-directory – “Send As”权限和“您无权发送给此收件人”错误

    我不确定为什么,但很多时候,我不得不进入Outlook中的资源邮箱本身并转到工具–选项并使该人成为邮箱上的委托,然后才能代表资源发送.为了举例说明我的意思,我将从上面借用你的例子:为帐户B创建新的邮件配置文件.使用此新配置文件打开Outlook,然后转到“工具”–“选项”–“委派”.添加帐户代表的发送权限.现在测试账户A是否真的可以代表账户B发送.

  10. windows-server-2012-r2 – 发布后安装问题 – 无法连接

    我以前从未设置过Exchange服务器.我正在尝试设置Exchange2016服务器.我得到了预先要求的设置;.NET4.5.2Microsoft统一通信托管API4.0CoreRuntime64位我做了设置,检查了MailBox角色并告诉它安装它可以自己做的所有预先请求.我收到的唯一警告是Exchange2010角色无法再安装.现在我正在进行后期设置.我能够登录网页门户,我可以在那里配置任何东西

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部