标签: office365api

NameIdentifier vs ObjectIdentifier

我有一个多租户ASP.NET应用程序使用OpenIdConnect和Azure AD作为Office 365的身份提供程序.当用户通过身份验证后,我收到了我的声明ClaimsPrincipal.Current.

我想识别用户并将此id引用存储在我的数据库中.我问了这个问题.有人回答说

当尝试唯一地识别用户时[NameIdentifier]应该是您的首选.

但似乎NameIdentifier声称,http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier 取决于应用程序.确切地说,如果我在Azure AD中创建另一个应用程序,那么NameIdentifier对于同一个真正的 Office365用户来说,它们将是不一样的.请记住,我们可能必须创建另一个Azure AD清单(因为我们可能需要其他范围),我们应该能够找回相同的最终用户.

与此同时,我评论了另一个主张: ObjectIdentifier http://schemas.microsoft.com/identity/claims/objectidentifier

ObjectIdentifier对于给定的Office 365用户,所有Azure AD保护的应用程序似乎都是相同的.

你能准确解释这两种说法之间的区别吗?更重要的是,您是否可以确认ObjectIdentifier可以在任何Office 365订阅中将其用作用户的"通用"标识符.

claims-based-identity azure-active-directory office365api azure-ad-graph-api

17
推荐指数
1
解决办法
3221
查看次数

通过GoDaddy购买的Office365帐户未返回刷新令牌

背景

我们有一个功能,可以使用此处概述的Office365 REST apis同步我们的应用程序和Office365之间的日历条目和联系人.我们正在使用API的第1版.对于授权,我们在此处通过Azure AD执行授权.

问题

在正常情况下(当使用直接从Microsoft购买的Office365帐户时),我们的系统按预期工作:我们能够在用户到期时刷新用户的令牌,并在交换时返回新的访问和刷新令牌.

在第二种情况下,当使用GoDaddy购买的 Office365帐户进行测试时,我们遇到了一个阻塞问题,可以在这一系列步骤中概述:1.用户从我们的应用程序 - > Office365登录页面发送.2.用户输入电子邮件地址3.用户被重定向到GoDaddy Office365登录页面.4.用户完成授权,并通过响应中的访问代码重定向回我们的应用程序.5.应用程序交换来自Office365的access_token和refresh_token的访问代码.6.一段时间过去了,access_token到期7.应用程序使用refresh_token刷新用户的access_token

预期的行为

此时我们希望收到一个新的access_token以及一个新的refresh_token,就像我们使用常规Office365帐户时一样

实际行为

仅对于通过GoDaddy购买的帐户,我们在首次刷新后不会在响应中收到新的刷新令牌.

显然,当打算进行长时间运行的同步时,这是一个突破性的情况,因为用户将无法再超过此点刷新其令牌.

邮差跟踪(可以保存为.json并导入到Postman进行调试 https://gist.github.com/drunkel/7ec66ed33f66d0070148694651699d03(ID和秘密已被删除)

题:

  • 这是一个已知的问题?
  • 有解决方法吗?

oauth azure office365 azure-active-directory office365api

12
推荐指数
1
解决办法
949
查看次数

如何使用一个驱动器业务API从本机应用程序的azure活动目录中获取客户机密码?

我正在开发一个outlook插件.我想在其中使用一个驱动器API.我很容易得到客户端ID和客户端秘密使用API​​的一个驱动器个人帐户.但是,当我在azure活动目录中注册我的应用程序的一个驱动器业务API ,它只为我创建了一个客户端ID,但没有创建任何客户端密码.我在注册时选择了本机应用程序,因为我的应用程序是本机app.I无法在没有客户端密钥的情况下对用户进行身份验证.请告诉我,如何让客户保密?提前感谢.

c# office365 azure-active-directory onedrive office365api

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

获取O365日历的授权令牌

我正在制作一个需要访问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)

javascript office365api office365-restapi

11
推荐指数
1
解决办法
698
查看次数

在 Azure Active Direct 上注册应用程序时,我应该使用什么“重定向 URI”或“登录 URL”?

可能看起来是一个愚蠢的问题,但我认为微软的文档对初学者不太友好。它使用“ http://localhost:31544 ”作为登录 URL,使用“ http://MyFirstAADApp ”作为重定向 URI,但尽管我了解本地主机是什么,但我无法弄清楚到底是什么它上面的数字以及我如何为我的应用程序定义它们,并且对于重定向 URI 应该为本机应用程序做什么以及我应该如何为我自己的 URI 定义 URI 的线索绝对为零。

为了更清楚地了解我要添加哪种类型的应用程序,我只想访问 Office 365 管理 API 工具并从中获取一些数据,因此我认为本机应用程序目前可以满足我的需求。根据 Microsoft 的文档,需要在 Azure AD 上注册应用程序。

因此,扩展标题,如何为我的本机应用程序定义 URI 是我主要想知道的。如果能进一步澄清此 URI 的确切用途以及如何使用和/或定义 Web 应用程序的本地主机 URL,我们将不胜感激。

azure office365 azure-active-directory office365api

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

使用 Python 从 Microsoft Teams 获取文件

Teams 似乎缺乏将文件镜像到共享目录的任何本机方法。我正在尝试使用 Python(或其他语言,但首选 python!):

A。使用Python直接从微软团队拉入内存并与Pandas一起处理

b. 将团队中的文件复制到共享网络文件夹中(然后 Python 可以读取该文件夹)

我发现了这个,但无法让它与团队一起工作 - 团队 URL 看起来与这些完全不同。如何使用工作或学校帐户在 Python 中读取 SharePoint Online (Office365) Excel 文件?

不过,这似乎很接近我想做的事情。我还在 PyPi 存储库上找到了“pymsteams”。https://pypi.org/project/pymsteams/似乎只是让您向 Teams 发送消息而没有其他功能?除非我误解了什么。

https://pypi.org/project/Office365-REST-Python-Client/

https://pypi.org/project/pymsteams/

from office365.runtime.auth.authentication_context
import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File 

url = 'https://teams.microsoft.com/l/file'
username = 'myusername'
password = 'mypassword'
relative_url ='myurl'

ctx_auth = AuthenticationContext(url)
ctx_auth.acquire_token_for_user(username, password)
Run Code Online (Sandbox Code Playgroud)

尝试运行上面的代码会出现 AttributeError: 'NoneType' object has no attribute 'text'

完整的堆栈跟踪:

runfile('H:/repos/foo/untitled0.py', wdir='H:/repos/foo')
Traceback (most recent call last):

  File "<ipython-input-35-314ab7dc63c9>", line 1, in …
Run Code Online (Sandbox Code Playgroud)

python-3.x office365 office365api microsoft-teams

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

PHP中的Office 365 API

我正在尝试为我的公司制作日历视图,以显示哪些员工可用.我在Azure中创建了一个应用程序,我可以登录到系统,我获得了一个访问令牌,但我无法获取信息.

我使用curl构建请求url并使用我的请求发送此标头

array(6) {
 [0]=>
  string(28) "User-Agent: php-tutorial/1.0"
  [1]=>
  string(588) "Authorization: Bearer ~ACCESS_TOKEN~"
  [2]=>
  string(24) "Accept: application/json"
  [3]=>
  string(55) "client-request-id: ~GUID~"
  [4]=>
  string(30) "return-client-request-id: true"
  [5]=>
  string(45) "X-AnchorMailbox: ~MAIL~"
}
Run Code Online (Sandbox Code Playgroud)

而我得到的回应是:""

我究竟做错了什么?

UPDATE

登录后,Microsoft不会询问我是否要授予对该应用程序的访问权限,但它确实授予了我访问令牌的权限.这可能是问题吗?我怎样才能让它获得许可?

更新2

登录并尝试获取信息后,我收到401错误说:访问被拒绝.我认为这很奇怪,因为它已经授予了我一个访问令牌.

更新3

几天后,我尝试了一些示例和教程代码来检查它是否有效.但即使在这些应用程序中,api似乎也无法运行.这些是我尝试过的项目.

https://github.com/microsoftgraph/php-connect-rest-sample

https://dev.outlook.com/restapi/tutorial/php

php azure office365 office365api

9
推荐指数
1
解决办法
2145
查看次数

Microsoft Graph API:获取邮件帐户的所有规则

我在Office365中拥有和管理员帐户,其中一个应用程序可以完全访问任何与交换相关的内容.我正在编写一个具有用例的应用程序,我需要在用户的邮箱中创建所有规则.这包括规则名称,内容等.

理想情况下,这应包括设备之间的Active Sync设置,eDiscovery邮箱的权限等.

我没有看到图API中的那些支持.有没有办法获得这些信息?

office365 office365api microsoft-graph

9
推荐指数
1
解决办法
484
查看次数

Office 365 API和EWS之间有什么区别

Office 365 API和EWS(Exchange Web服务)之间有什么区别?

我什么时候使用?

exchangewebservices office365api

8
推荐指数
1
解决办法
1490
查看次数

在azure AD中为sharepoint在线创建应用程序

大家好

任何人都可以告诉我如何在线创建SharePoint应用程序吗?

我正在使用Azure AD,并且没有针对sharepoint online的选项(1),我只看到统一API的图形应用程序.

在此输入图像描述 非常感谢

(1)2周前有一个名为Offfice365 Sharepoint的应用程序,但它消失了

sharepoint office365 office365-apps office365api

8
推荐指数
1
解决办法
578
查看次数