我在我们的 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 应用程序权限以与所有不同的本机客户端一起工作。