如何从Azure活动目录中获取本机应用程序的客户端密钥,以便使用OneDrive商业版API?

12
我正在开发一个 Outlook 插件。我想在其中使用 OneDrive API。我很容易地为使用个人 OneDrive 账户的 API 获取了客户端 ID 和客户端密钥。但是,当我在 Azure Active Directory 中为 OneDrive 商业 API 注册应用程序时,它只为我创建了一个客户端 ID,没有创建任何客户端密钥。由于我的应用程序是本地应用程序,因此在注册时选择了原生应用程序。如果没有客户端密钥,我将无法对用户进行身份验证。请告诉我如何获取客户端密钥?谢谢!
3个回答

9
创建应用程序并单击密钥。根据需要添加一些描述和到期日期,然后单击保存。密钥将自动生成。请确保复制并保存密钥,否则它将被隐藏。

enter image description here enter image description here enter image description here enter image description here


3
图片的引用出了问题吗?当我点击第二个时,会显示第一个;当我点击第四个时,会显示第三个…… - bytedev
一个额外的注意事项:这需要将AAD应用程序注册为“Web API/APP”。对于“本地客户端”AAD应用程序,没有这样的选项。 - Robert
1
截至撰写本评论的时间(2019年6月28日),似乎原生应用程序现在可以拥有机密信息了。 - Chris Hammond

8
原生客户端没有与它们关联的任何秘密 - 因为它们是用于在设备上运行的,所以假定它们无法保护秘密。原生客户端使用clientID来指示客户端应用程序,但始终通过涉及用户身份验证来进行身份验证过程。如果您选择在http://github.com/azureadsamples中选取任何一个原生客户端样例,您将看到如何使用clientid足以触发用户身份验证。

但是OneDrive API文档说我必须传递客户端秘钥才能获取访问令牌。 - V K
该流程是指网站执行调用。网站可以保护密钥,并且即使用户不再存在,也可以自主操作。您应该能够按照为本机客户端提供应用程序应用的相同说明进行跟随,省略客户端密钥。 - vibronet
谢谢帮助,我会尝试并发布结果。 - V K
我尝试在HTTP Web请求中不发送客户端密钥。它在链接中显示的第2步中有效。但在第4步中,它会出现错误的请求(400)错误。当我发送一个随机字符串作为客户端密钥时,它会给出未经授权的错误(401)。我该怎么办? - V K
发送一个秘密不会有帮助,考虑到我们迄今讨论的内容...尤其是一个随机字符串 :) 我会将他的线程指向OneDrive团队。 - vibronet
问题已经解决,我根本不需要传递客户端密钥。问题出在这个链接的第4步示例上(https://dev.onedrive.com/auth/aad_oauth.htm);OneDrive的开发人员编写了以下内容:`POST https://login.windows.net/common/oauth2/token Content-Type: application/x-www-form-urlencodedclient_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret} &refresh_token={refresh_token}&grant_type=refresh_token&resource={resource_id}` 以上示例有一个更正,应该将“resource={resource_id}”改为“resource_id={resource_id}”。 - V K

3

在保存信息后离开页面后,您无法从Azure网站获取客户端密钥。您需要创建一个新的密钥,并在单击保存时立即复制并安全存储该密钥。这是从Azure网站获取密钥的唯一时间。


1
Rich,你的观点总体上是正确的 - 但在这种情况下,鉴于VK应用程序的性质,他甚至无法添加一个秘密。 - vibronet
3
这个 OneDrive for Business API 真是太难懂了,根本不像所谓的“一统天下”("One to rule them all")。官方文档和示例都没有涉及原生应用程序中使用的任何内容。MSDN 和 dev.onedrive.com 上的某些链接存在矛盾,他们可能是针对不同的东西但并不明显。而且唯一跳过(某种程度上)用户交互的方法就是使用 Selenium 自动化整个登录过程或者使用其他 UI 自动化工具,这使得该 API 完全没用,因为你甚至不能在没有用户交互的情况下开始使用它。 - ShP
同意ShP的观点。如果有其他人正在寻找ClientSecret,则它是您在Azure Ad应用程序的密钥(在密钥选项卡中)输入的值。 - Rahatur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接