【发布时间】:2018-10-26 06:46:54
【问题描述】:
我在 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 项目将由本机 Dekstop 客户端或混合 HTML5 和 Javascript 移动设备应用程序查询。
Web Api 项目需要从我们的 SharePoint O365 租户中读取、创建、更新和删除数据。因此,我需要 AccessToken 来初始化 ClientContext 或通过休息响应发送 i。
由于 Web Api 处理用户授权,因此已经有一个端点供用户登录,并且我想在此端点中获取令牌。这就是我希望它保持沉默的原因,因为“flexbile 浏览器弹出窗口”已经存在。
也许在这种情况下我不需要使用用户名/密码获取令牌,但是我不知道如何配置 Azure 应用程序权限以使用所有不同的本地客户端。
【问题讨论】:
-
所以,您不需要代表用户执行操作,对吗?你能用docs.microsoft.com/en-us/azure/active-directory/develop/…吗?我们在我们的应用程序中使用它,它工作得很好。