我正在制作一个需要访问Office 365日历内容的应用.该应用程序不需要直接用户操作来登录和检索其数据,因此我无法使用标准OAuth方式来获取此令牌.
我对谷歌的日历方式有点熟悉,用它的"服务帐户"逻辑,涉及一个非对称的RSA密钥来做,所以我试图为O365找到类似的东西.
我发现这个博客: https://blogs.msdn.microsoft.com/arsen/2015/09/18/certificate-based-auth-with-azure-service-principals-from-linux-command-line/ 那帮我配置了很多应用程序,并在两侧设置了所有密钥以允许连接.最后,我设法让它工作,得到一个令牌并列出资源组.
一切都很好,我认为它可以很容易地使用Microsoft图形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
Run Code Online (Sandbox Code Playgroud)
获取令牌答案:
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
日历列表请求:
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
Run Code Online (Sandbox Code Playgroud)
回答空,但在标题中:
Content-Length ?0
Date ?Fri, 29 Apr 2016 16:44:59 GMT …
Run Code Online (Sandbox Code Playgroud) 我知道我可以阅读Office 365 API的联系人,但我无法弄清楚是否可以从地址簿中获取联系人.
我希望能够在 Azure 活动目录中获取所有用户的 office365 照片。
现在我可以使用图形 SDK 获取当前用户的电子邮件
GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient();
public async Task<string> GetMyEmailAddress(GraphServiceClient graphClient)
{
User me = await graphClient.Me.Request().Select("mail,userPrincipalName").GetAsync();
return me.Mail ?? me.UserPrincipalName;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将集成在得到照片部分来自https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/profilephoto_get到代码。
任何帮助或代码示例表示赞赏!
c# outlook-restapi office365api office365-restapi microsoft-graph-api
请注意,此问题与通用 REST 服务调用无关。它是关于特定的 Office 365 REST 服务 API。
具体来说,我需要在这里使用“联系人”API:https : //msdn.microsoft.com/office/office365/APi/contacts-rest-operations#UsingtheContactsRESTAPI
我想知道如何在控制台应用程序中使用 Office 365 REST 服务。有一些工具可以处理来自 Web、移动和 Windows 商店应用程序的 API。但是我没有找到控制台应用程序的资源。
我在应用程序注册门户上创建了应用程序:https : //apps.dev.microsoft.com
所以我已经有了应用程序 ID、应用程序机密、平台移动应用程序(客户端 ID、重定向 URI)
我想我需要身份验证令牌(我有用户名、密码)。并使用它来调用 REST 服务。
c# active-directory office365 outlook-restapi office365-restapi
我按照这篇文章http://dev.office.com/code-samples-detail/2142和Ruby来获取用户的电子邮件地址.这是代码:
# Parses an ID token and returns the user's email
def get_email_from_id_token(id_token)
# JWT is in three parts, separated by a '.'
token_parts = id_token.split('.')
# Token content is in the second part
encoded_token = token_parts[1]
# It's base64, but may not be padded
# Fix padding so Base64 module can decode
leftovers = token_parts[1].length.modulo(4)
if leftovers == 2
encoded_token += '=='
elsif leftovers == 3
encoded_token += '='
end
# Base64 decode (urlsafe version)
decoded_token = …
Run Code Online (Sandbox Code Playgroud)我的用户无法使用我们的服务,因为Outlook REST API返回以下错误代码RESTAPINotEnabledForComponentSharedMailbox
。
看来他们的邮箱不是共享邮箱。那是什么样的邮箱?
您能告诉我更多有关此错误的信息吗?有什么可以做的吗?
我正在探索一个选项,看看是否可以使用 Office 365 邮件 REST API 从组织中(即域内)的所有邮箱获取邮件,或者是否有任何其他方法可以轻松获取这些邮件。
这些是我探索过的选项:1) 将所有电子邮件密件抄送给特定帐户,然后从密件抄送帐户获取消息。2) 探索了将所有邮件发送到另一个电子邮件服务器的连接器选项。3)我还在其他帖子中看到,建议创建一个管理员帐户/安全组,并使用 Power Shell 授予该帐户对组织中所有邮箱的完全访问权限,但此选项似乎非常不方便,因为可能会添加新邮箱,因此 Power Shell需要再次运行,并且即使在使用 REST API 获取消息时仍然授予管理员用户完全访问权限,它也只会从管理员帐户的邮箱中获取消息,而不是从组织中的所有邮箱获取消息。
所以我想知道是否有可能使用 Office 365 REST API 或其他一些可行且更简洁的方式获取组织的所有电子邮件?
向MS Graph发出以下请求,以检索按到期日期排序的标记消息:
https://graph.microsoft.com/beta/me/messages?$filter=flag/flagStatus%20eq%20%27flagged%27&$orderby=flag/dueDateTime/dateTime%20desc&$top=100
之前会成功,并且会返回预期的结果。最近,一些用户已经收到以下响应:
{
"error": {
"code": "InefficientFilter",
"message": "The restriction or sort order is too complex for this operation.",
"innerError": {
"request-id": "5ef714c9-39a0-4167-a4d0-3682dcb46de4",
"date": "2016-11-17T16:41:16"
}
}
}
Run Code Online (Sandbox Code Playgroud)
图表中是否引入了错误?
奇怪的是,该请求以前没有问题,现在被认为效率低下。它也仅在某些用户的帐户上发生。
以下请求检索按接收日期排序的电子邮件附件的请求也发生了相同的问题:
https://graph.microsoft.com/v1.0/me/messages?$filter=hasAttachments%20eq%20true&$orderby=receivedDateTime%20desc&$expand=attachments($select=name,contentType,size,lastModifiedDateTime)&$top=6
现在将获得相同的InefficientFilter错误响应。请注意,第二个请求是针对v1.0 API的,因此这不仅限于beta。
另请注意,删除受影响帐户上的orderby子句将使请求成功。
office365 azure-ad-graph-api office365-restapi microsoft-graph
我试图找到任何可能的方式来获得Python中的SharePoint列表.我能够通过以下视频连接到SharePoint并使用Rest API获取XML数据:https://www.youtube.com/watch?v = dvFbVPDQYyk ...但不确定如何将列表数据导入python.最终目标是获取SharePoint数据并每天导入SSMS.
这是我到目前为止...
import requests
from requests_ntlm import HttpNtlmAuth
url='URL would go here'
username='username would go here'
password='password would go here'
r=requests.get(url, auth=HttpNtlmAuth(username,password),verify=False)
Run Code Online (Sandbox Code Playgroud)
我相信这些将是下一步.我真的只需要帮助从Excel中以Excel/CSV格式获取数据,并且从那里开始应该没问题.但任何建议都会有所帮助..
#PARSE XML VIA REST API
#PRINT INTO DATAFRAME AND CONVERT INTO CSV
#IMPORT INTO SQL SERVER
#EMAIL RESULTS
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有以下代码的Office 365统一API列出用户:
$TenantID = "xxx"
$F_ClientID = "yyy"
$F_ClientSecret = "zzz"
Add-Type @'
using System;
public class OAuthContext{
public string AccessToken{get;set;}
public string TokenType{get;set;}
public string ExpiresIn{get;set;}
public string RefreshToken{get;set;}
}
'@
$Uri = "https://login.microsoftonline.com/$($TenantID)/oauth2/token"
$ContentType = 'application/x-www-form-urlencoded'
$Headers = @{}
$Body = [System.Text.Encoding]::UTF8.GetBytes('grant_type=client_credentials&client_id='+$F_ClientID+'&client_secret='+$F_Clie ntSecret+'&resource"=https://graph.microsoft.com')
$Response = Invoke-RestMethod -Method POST -Uri $Uri -Headers $Headers -ContentType $ContentType -Body $Body
$Response
$Context = New-Object OAuthContext
$Context.AccessToken = $Response.access_token
$Context.ExpiresIn = $Response.expires_in
$Context.RefreshToken = $Response.refresh_token
$Context.TokenType = $Response.token_type
$Context
$Headers = @{}
$Headers.Add('Authorization',$Context.TokenType …
Run Code Online (Sandbox Code Playgroud) powershell office365 office365api azure-ad-graph-api office365-restapi
office365api ×6
office365 ×5
c# ×2
outlook ×2
javascript ×1
oauth-2.0 ×1
powershell ×1
python ×1
sharepoint ×1
sql ×1