标签: microsoft-graph-api

Microsoft Graph API 以 HTML 形式返回邮件正文

我想阅读我的电子邮件并将它们转换为 json。我正在使用Microsoft Graph API像这样查询 Office 365 邮箱

GraphServiceClient client = new GraphServiceClient(
            new DelegateAuthenticationProvider (
                (requestMessage) =>
                    {
                        requestMessage.Headers.Authorization =
                                            new AuthenticationHeaderValue("Bearer", token);
                        return Task.FromResult(0);
                    }
                )
            );

var mailResults = await client.Me.MailFolders.Inbox.Messages.Request()
                                .OrderBy("receivedDateTime DESC")
                                .Select(m => new { m.Subject, m.ReceivedDateTime, m.From, m.Body})
                                .Top(100)
                                .GetAsync();
Run Code Online (Sandbox Code Playgroud)

我按照教程进入了这个阶段。但是我的消息正文返回为 html 而不是文本。有没有办法可以指定 message.body 返回文本甚至 json 而不是 HTML?

c# office365 office365api microsoft-graph-security microsoft-graph-api

6
推荐指数
1
解决办法
5019
查看次数

Microsoft 图返回“访问令牌为空”

我发布了这个请求:

 
POST https://login.microsoftonline.com:443/{my-tennant-here}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com 
Content-Type: application/x-www-form-urlencoded

client_id={client id here}
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret={client secret here}
&grant_type=client_credentials
 

这将返回:

 
{
  "token_type": "Bearer",
  "expires_in": 3599,
  "ext_expires_in": 0,
  "access_token": "eyJ0eX......
}
 

我已经使用 jwt.io 解码了令牌,它绝对不是空的。它包含 14 个声明。aud, iss, tid 等...

然后我在此请求中使用访问令牌

 
GET https://graph.microsoft.com/v1.0/users
Athorization: Bearer eyJ0eX...
 

然后我得到一个 401 Unauthorized 这个机构:

 
{
  "error": {
    "code": "InvalidAuthenticationToken",
    "message": "Access token is empty.",
    "innerError": {
      "request-id": "",
      "date": "2018-08-14T15:41:44"
    }
  }
}
 

预期结果是 200 Ok,正文包含用户列表

这是否仅仅意味着我的应用程序未经授权,并且错误消息只是具有误导性(访问令牌为空)?还是我做错了什么?

更新:我注意到虽然令牌确实包含声明,但它没有范围声明,这对我来说似乎有点奇怪。我会假设它具有 User.Read.All 范围。应用程序(客户端 ID/客户端机密)应该具有此权限。我收到的令牌中的声明具有以下声明:

 
aud: "https://graph.microsoft.com",
iss: "https://sts.windows.net/my tennant …
Run Code Online (Sandbox Code Playgroud)

authentication azure azure-active-directory azure-ad-msal microsoft-graph-api

6
推荐指数
2
解决办法
2万
查看次数

Microsoft Graph API OrganizationFromTenantGuidNotFound 使用 MSAL

在 AAD 应用程序注册中,隐式授予流程为 true;我们已将权限委派给 User.Read 和 User.Read.All。

private static getContext(): Msal.UserAgentApplication {
    if (AuthenticationService.Context) return AuthenticationService.Context;
    const logger = new Msal.Logger((_logLevel, message, _piiEnabled) => {
        console.log(message);
    }, { level: Msal.LogLevel.Verbose, correlationId: "12345" });

    AuthenticationService.Context = new Msal.UserAgentApplication(
        Environment().authentication.clientId,
        AuthenticationService.getAuthority(),
        (errorDesc, token, error, _tokenType) => {
            if (token) {
                AuthenticationService.isAuthenticated = true;
                AuthenticationService.accessToken = token;
            } else {
                const localizedError: string = LocalizationService.localize(error);
                alert(localizedError !== error ? localizedError : errorDesc);
            }
        },
        {
            logger: logger,
            storeAuthStateInCookie: true,
            state: "12345",
            cacheLocation: "localStorage" …
Run Code Online (Sandbox Code Playgroud)

single-page-application azure-ad-msal microsoft-graph-api

6
推荐指数
1
解决办法
4500
查看次数

尝试通过 MS Graph API 检索房间日历时出现 ErrorItemNotFound

除了检索用户日历的日历视图(代表用户)之外,我们还努力尝试通过 Graph API 使用 https://graph.microsoft.com/beta/users/room1@ourdomain.com/calendarView. 这是一个痛苦的过程,因为我们遇到了很多问题,目前被困在以下404响应中:

https://graph.microsoft.com:443/v1.0/users/room1@ourdomain.com/calendarView?startDateTime=2018-12-04T23:00:00.000Z&endDateTime=2019-02-10T22:59:59.999Z

{
  "error": {
    "code": "ErrorItemNotFound",
    "message": "The specified object was not found in the store.",
    "innerError": {
      "request-id": "358a003a-57a4-4f0e-91da-edc17c1fa2d8",
      "date": "2018-12-12T07:38:33"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

房间的电子邮件地址已经过双重检查并且资源存在,因为我们可以使用它创建约会,并且当我们检索在该位置有约会的用户的日历时,它甚至会在响应中返回。

应用程序权限和 OAuth2 范围设置为:openid email profile offline_access https://graph.microsoft.com/Calendars.Read https://graph.microsoft.com/Calendars.Read.Shared https://graph.microsoft.com/User.Read https://graph.microsoft.com/User.ReadBasic.All https://graph.microsoft.com/User.Read.All,因此根据文档判断,这应该不是问题。

有谁知道如何解决这个问题?

microsoft-graph-api

6
推荐指数
1
解决办法
1933
查看次数

在哪里可以找到 Microsoft App 的 APP ID URI?

我正在尝试以我注册的应用程序登录,并授予以下权限:Azure 门户 > 应用程序注册 > 应用程序注册(预览)> 我的应用程序名称 - API 权限

根据此文档APP ID URI在请求令牌时,我必须在范围参数中传递我的资源标识符 ( )。我确信这个范围参数是导致我出现问题的参数。

我尝试了范围的不同参数。

  1. https://graph.microsoft.com/.default:这适用于基本功能,例如阅读日历,但我认为默认权限很少满足我的需求。既然这样有效,我相信我的其他参数是正确的,范围就是问题所在。

  2. [APP-ID]/.default:这给了我一个成功的响应,但是,每当我尝试提出任何请求时,包括基本的读取日历请求,我都会收到InvalidAuthenticationToken. 我可以向您保证,我正在传递从令牌请求中检索到的正确令牌。

  3. 基于在线建议的多种不同 URL 组合。他们都回来了

    “在租户 {id} 中找不到资源主体 {resource-url}。

我坚信问题在于我没有通过APP ID URI我的应用程序的正确性。谁能告诉我在哪里可以找到这个资源?我在网上搜索的所有内容都已使用 2 年以上,对于新的 Azure 门户似乎并不相同。

azure azure-active-directory microsoft-graph-api

6
推荐指数
1
解决办法
1万
查看次数

如何使用固定输入创建 GraphServiceClient 的 IAuthenticationProvider 对象

我正在尝试从我的 Java 应用程序连接到 Microsoft Share Point。Microsoft Graph SDK for Java 的文档不是很清楚。

我正在尝试启动 Graph 客户端,同时通过自定义 GUI 或配置文件提供所需的凭据。

我正在尝试按照以下方式进行但可以

IGraphServiceClient client = GraphServiceClient.builder().authenticationProvider(authenticationProvider).buildClient();

Run Code Online (Sandbox Code Playgroud)

我需要“authenticationProvider”对象是一个实现 IAuthenticationProvider 的类,但是它不清楚要添加什么参数或如何创建这个对象。有没有人以前尝试过这个,构建客户端并提供所需凭据的正确方法是什么?

java sharepoint microsoft-graph-sdks microsoft-graph-api

6
推荐指数
2
解决办法
5949
查看次数

当 includeResourceData=true 时,用于 MS 图形创建订阅的 webhooks 失败

 {
       "changeType": "created,updated,deleted",
       "notificationUrl": "https://somewebsite.com/mswebhook/graph/notifications",
       "resource": "/teams/{team-id}/channels/{channel-id}/messages",
       "expirationDateTime": "2019-12-30T09:41:21Z",
       "clientState": "",
       "includeResourceData": true,
       "encryptionCertificate": "TUlJQklUQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FRNEFNSUlCQ1FLQ0FRQlhFL0xOZjVYYVY4ZFlXbWFuSU9qUwphSnhyUG1tN0dHN0lWOGYwV2RjZDltbUkvaTVXQzhCNFBYaVBKREtKTnVFL2QvMXo5TndSbjR1UFBQQm9sN1BWCmdudVJ6UmZJSVEvUW1TZjYwUi9LUnYybHVlZzVwNW84Qk5UNDczdTRCbVZJVHNBWlF1eG43RGdnUi9JZlQzSVgKelpMdzNXWitDYzJyS1crblpmbUwwU0NiN21EL3RTZ3VqQUJPVEVvS0xBODkvNWhUamhuNzcvWHJzUTYrV1hMVgpKL3NtVDJvU3R3TzBnYXRIRUkwWkRSL0VYNkdVWDRRRVI4M0puS2hPSDJrZzZQNlZUMDFGUEw0Nk5WemZydWE4ClVob052Z0VlQStPY2xBOU5mUUpJQnVKUVFTbGZ0TmhYODJtVEdhVEtBTFN1bWZieUNac1ljQ3l4MXQ5RXF6Qi8KQWdNQkFBRT0=",
       "encryptionCertificateId": "id",
       "lifecycleNotificationUrl": "https://somewebsite.com/mswebhook/graph/notifications"
    }
Run Code Online (Sandbox Code Playgroud)

当这个请求是从邮递员发出时它正在给

{
  "error": {
    "code": "InvalidRequest",
    "message": "System.Security.Cryptography.CryptographicException: Cannot find the requested object.\r\n\r\n   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)\r\n   at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte[] rawData)\r\n   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)\r\n   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)\r\n   at Microsoft.Graph.Encryptor.Encryptor.ValidateCertificate(String certificate, String& errorMessage) in X:\\bt\\1070414\\repo\\src\\Dev\\Notifications\\Notifications.Azure\\Encryptor\\Encryptor.cs:line 293",
    "innerError": {
      "request-id": "e578bdba-2c47-41d7-a0da-5395b05e4203",
      "date": "2019-12-31T06:57:59"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

没有 includeResourceData 属性,订阅和通知工作正常。我在选择加密证书属性时遇到问题。目前我正在加密证书中传递 Base64 位编码的 2048 位 RSA 公钥(在线生成)。

webhooks postman microsoft-graph-api

6
推荐指数
0
解决办法
205
查看次数

在 Microsoft Graph API 中,获得管理员同意的应用程序是否可以为批准它的管理员之外的其他用户生成令牌?

我在 Microsoft Active Directory 中注册了一个多租户应用程序,该应用程序使用管理员同意来获取对 Microsoft Graph API 中某些应用程序范围 API 的访问权限。它使用/token端点获取令牌,然后调用这些图形 API。它工作得很好。 https://docs.microsoft.com/en-us/graph/auth-v2-service#token-request

现在我想增强我的应用程序以访问一些委托(用户)范围 API,这些 API 不允许在应用程序范围内进行访问。我的应用程序已配置为在管理员同意时向管理员请求这些委派权限。但我想以目录中的每个用户的身份调用这些 API ,而不是安装我的应用程序的管理员。

重要的是,让组织中的每个用户单独完成我的应用程序的 OAuth 流程对我来说是不可行的。

那可能吗?我可以通过用我的应用程序令牌交换用户令牌来以某种方式模拟用户吗?管理员是否可以以编程方式执行某些操作,以作为我的应用程序的个人用户生成令牌,就像他们已通过 OAuth 流程一样?

oauth-2.0 microsoft-graph-api

6
推荐指数
1
解决办法
144
查看次数

Microsoft graph : 使用 Put 请求 Java 更新文档

基于 MS 图形文档,我看到我可以更新一个 driveItem(文件)并将其放在特定的共享点驱动器中。该应用程序作为守护程序运行(无需用户登录)。

为此,我使用这个入口点:

PUT /drives/{drive-id}/items/{item-id}/content
Run Code Online (Sandbox Code Playgroud)

我尝试使用主类进行编码并传递现有参数。要更新文档,我调用方法更新文档:

UpdateDocumentResponseModel updatedDocument = fileGraphs.updateDocument(token, DRIVELIBID, DOCUMENTID, INPUTPATH, DOCUPDATE);
Run Code Online (Sandbox Code Playgroud)

被调用的方法旨在构建 URL 并为 PUT 请求准备数据:

public UpdateDocumentResponseModel updateDocument(String accessToken,
                                                  String driveLibId,
                                                  String documentId,
                                                  String inpuPath,
                                                  String docName) throws MalformedURLException {
    String fullPath = inpuPath + docName;
    URL url = new URL("https://graph.microsoft.com/v1.0/drives/" + driveLibId + "/items/" + documentId + "/content");
    return requestsBuilder.updateDocument(accessToken, url, fullPath);
}
Run Code Online (Sandbox Code Playgroud)

现在在这个阶段我必须提出请求:

public UpdateDocumentResponseModel updateDocument(String accessToken, URL url, String fullPath) {
    UpdateDocumentResponseModel returnValue = new UpdateDocumentResponseModel();

    try {
        CloseableHttpClient client = …
Run Code Online (Sandbox Code Playgroud)

java sharepoint-online microsoft-graph-api

6
推荐指数
1
解决办法
162
查看次数

通过调用 Microsoft Graph API(测试版)获取通话记录?

我是 Microsoft Graph API 的新手,我的最终目标是创建一个 Power BI 报告来显示 Microsoft Teams 调用相关矩阵。

文档中我可以看到 HTTP 示例(https://graph.microsoft.com/beta/communications/callRecords/ {id})。文档中有几件事不清楚。

  1. 我在哪里可以获得在示例请求中使用的呼叫ID
  2. 获取呼叫数据需要CallRecords.Read.All权限,我需要在哪里设置这个权限以及过程是什么。

microsoft-graph-api

6
推荐指数
1
解决办法
2239
查看次数