Outlook 365 Rest API-受众声明值无效 - c#

我正在一个当前项目中,我们已经在使用Identity Server进行身份验证。在这里,我们使用访问令牌访问Microsoft Graph API以获取会议,个人资料图片和其他内容。

现在,我们希望与新的Outlook 365 API集成在一起,以读取和将来写入任务。

我正在尝试使用已经存在的accesstoken从Outlook restapi获取Outlook任务:

{
  "aud": "https://graph.microsoft.com",
  "iss": "https://sts.windows.net/17e18230-55e1-4f60-8262-5c67e2b2ab11/",
  "iat": 1145153145,
  "nbf": 1491225024,
  "exp": 1491258924,
  "acr": "1",
  "aio": "QSQA8/8DAFFFInSl+iIfvSXhA95NqTYRmKugpaLdvffNkba0L8N5x0U=",
  "amr": [
    "pwd"
  ],
  "app_displayname": "AwesomeApp.Dev",
  "appid": "0c2fgc75-f2ee-fas5-ae9f-fasd2s5d523fs",
  "appidacr": "1",
  "family_name": "Jesper Krægpøth Ryder",
  "given_name": "Joshua",
  "ipaddr": "208.67.222.222",
  "name": "Joshua Jesper Krægpøth Ryder",
  "oid": "a4586g1-d0215-3226-ar05-125463gasrqw5",
  "platf": "3",
  "puid": "654wf84yu3s1g6",
  "scp": "Calendars.Read Calendars.Read.Shared Calendars.ReadWrite Directory.Read.All Files.ReadWrite Group.Read.All Mail.ReadWrite Mail.Send Tasks.Read User.Read User.ReadBasic.All User.ReadWrite",
  "sub": "0s_x0JhaNb1QLpIM2Hldx7pSVkrpTgXKe4QPXXiRguQ",
  "tid": "15e18430-54e9-4f60-8821-5c85e2b2ab77",
  "unique_name": "[email protected]",
  "upn": "[email protected]",
  "uti": "65a2gasdrfasda_fasfa54153",
  "ver": "1.0"
}

https://outlook.office.com/api/v2.0/me/tasks

错误信息:

Content-Length →0
Date →Tue, 04 Jul 2017 08:35:21 GMT
Server →Microsoft-IIS/10.0
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="",Basic Realm=""
X-BEServer →HE1PR0901MB1194
X-BackEndHttpStatus →401, 401
X-CalculatedBETarget →HE1PR0901MB1194.eurprd09.prod.outlook.com
X-CalculatedFETarget →HE1P190CU001.internal.outlook.com
X-DiagInfo →HE1PR0901MB1194
X-FEProxyInfo →HE1P190CA0005.EURP190.PROD.OUTLOOK.COM
X-FEServer →HE1P190CA0005, HE1PR0201CA0031
X-MSEdge-Ref →Ref A: C32D029EF8F84E68BF6327901BBED14F Ref B: HEL01EDGE0307 
Ref C: Tue Jul 4 01:35:21 2017 PST
X-Powered-By →ASP.NET 
request-id →2266567a-dd67-48f0-b3b4-72cfb5ee6b42
x-ms-diagnostics →2000003;reason="The audience claim value is invalid 
'https://graph.microsoft.com'.";error_category="invalid_resource"

在身份服务器上,我们使用中间件来处理我们的范围,如下所示:

        app.UseMicrosoftAccountAuthentication(new MicrosoftAccountOptions
        {
            AuthenticationScheme = "Microsoft",
            DisplayName = "Microsoft",
            SignInScheme = cookieScheme,
            ClientId = Configuration.GetValue<string>("ExternalKeys:SecretMicrosoftClientId"),
            ClientSecret = Configuration.GetValue<string>("ExternalKeys:SecretMicrosoftClientSecret"),
            CallbackPath = new PathString("/signin-microsoft"),
            Scope =
            {
                "offline_access",
                "Calendars.Read",
                "Calendars.Read.Shared",
                "https://outlook.office.com/tasks.read"
            },

            SaveTokens = true,

        });

尝试登录时,系统会提示您其他任务访问要求。因此,我们应该可以访问任务API。

是否有人尝试同时使用Microsoft graph API和新的Outlook 365 Rest API?

参考方案

新答案:
Api现在已经发布,可以在这里找到
https://msdn.microsoft.com/en-us/office/office365/api/task-rest-operations

我们项目的工作范围:

Scope =
{
    "offline_access",
    "Calendars.Read",
    "Calendars.Read.Shared",
    "Tasks.Readwrite"
},

旧答案:

您不能针对Outlook终结点使用为图形("aud": "https://graph.microsoft.com")发行的令牌。您需要带有"aud": "https://outlook.office.com"的令牌。为此,您需要对所有具有Outlook域完全限定的范围的Azure进行另一个身份验证请求:

Scope =
{
    "offline_access",
    "https://outlook.office.com/Calendars.Read",
    "https://outlook.office.com/Calendars.Read.Shared",
    "https://outlook.office.com/tasks.read"
},

但是,由于您已经在使用Graph,因此您也可以通过Graph访问任务:)。 Graph最近向其Beta端点https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/outlooktask添加了任务支持。

带有图像的PHP REST API Web服务是否正确使用? - php

我是开发Web服务的新手,我的想法是基于PHP构建REST API。这使得CRUD图像文件成为可能,例如images / test.jpg。是否可以通过REST Web服务获取图像?如果是,那怎么办?还是仅针对json响应提供Web服务?我更喜欢没有框架的方法,因为我想学习。我的路线:// GET /api/images # Get alle images …

使用Node JS在Office365上举行会议室会议-REST API - c#

我要在房间里开会。我正在使用以下代码,但我想使用Node JS。那我可以做这个手术吗?如果是,怎么办?我没有关于此问题的任何信息。所有示例和代码结构都用于召开我自己的会议。非常感谢。public void get_rooms() { ExchangeService service = new ExchangeService(ExchangeVersion.E…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

如何从php中获取datatables jQuery插件的json数据 - php

我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…

Google Analytics API - php

我正在实施Google Analytics(分析)Api。授权完成没有问题。成功授权后,我得到403 return code并得到消息:User does not have sufficient permissions for this profile。我的帐户具有Google Analytics(分析)数据,可以跟踪多个网站,并且我可以从网络浏览器访问它而…