4

我在我们的 Azure AD 中注册了一个本机客户端。

当我使用

var ar = _context.AcquireToken(resource, clientId, returnUri);

它会打开提示输入用户名和密码。如果我正确输入它们,我会得到一个有效的 AccessToken,一切都很好。

当我现在尝试通过 UserCrendtial 在代码中输入凭据时:

var credential = new UserCredential("username", "password");

var ar = _context.AcquireToken(resource, clientId, credential);

但是当我使用直接输入的凭据进行尝试时,两者都会导致错误。

AADSTS65001:没有为“4915f024-blah-blah-blah-f580ab5b0487”应用程序配置访问用户信息的权限,或者已过期或撤销。

我已经尝试过 UserCredential 的正常(string, string)(string, SecureString)重载。我已经尝试过使用与 AcquireToken 的第一个重载完全相同的用户名和密码组合(我在提示中输入)。

我还尝试为 Azure 中的应用程序授予所有委派权限:

  • 读取目录数据
  • 读写目录数据
  • 访问您组织的目录

并添加了具有权限的 Windows Azure 服务管理 API 应用程序:

  • 访问 Azure 服务管理

没有任何帮助。

作为旁注,Azure 中的应用程序对 SharePoint O365 租户具有权限。要读取和写入 ListItems,我不知道这是否相关。我通过的资源是 SharePoint 地址。

我不需要任何用户通过 Graph Api 访问 Azure。我只需要该 AccessToken 即可访问我们的 SharePoint Online。

编辑:

建筑学:

在此处输入图像描述

描述:

我们有一个处理用户授权、负载平衡等的 Web Api 项目。这个 Web Api 项目将由 Native Dekstop 客户端或混合 HTML5 和 Javascript 移动设备应用程序查询。

Web Api 项目需要从我们的 SharePoint O365 租户中读取、创建、更新和删除数据。因此,我需要 AccessToken 来初始化 ClientContext 或通过休息响应发送 i 。

由于 Web Api 处理用户授权,因此用户已经有一个端点可以登录,并且在这个端点中我想获取令牌。这就是为什么我希望它保持沉默,因为“flexbile 浏览器弹出窗口”已经存在。

也许在这种情况下我不需要使用用户名/密码获取令牌,但是我不知道如何配置 Azure 应用程序权限以与所有不同的本机客户端一起工作。

4

2 回答 2

0

不确定是否是您的情况,但您可以使用:

  • 内置身份验证(在 webapp 选项中设置“打开”;然后创建快速应用程序或/然后选择具有相同应用程序 ID 的高级模式);
  • 然后添加 AD 原生客户端应用程序;
  • 登录到旧的经典门户,选择本机应用程序并在配置中添加对您 express/advacsed web 应用程序的访问;
  • 之后,您将可以在浏览器中登录;并且使用 adal lib 将能够登录以从移动设备访问您的 api;

有关更多信息,请参阅 ms 文档和示例;

于 2017-06-09T08:53:25.447 回答
-2

直接使用用户名和密码有重要限制,请确保您没有绊倒http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to中列出的任何一个-authenticate-users-via-usernamepassword/。另请注意,需要显示用户同意屏幕(正如您描述的所有权限)或特定消歧步骤(例如尝试使用来自 X 的来宾用户访问受租户 Y 保护的资源)都不会起作用。你的场景是什么?您想使用用户名/密码而不是更灵活的浏览器弹出窗口的任何具体原因?

于 2015-03-30T15:35:09.403 回答