我在Azure AD中注册了一个Native Client。
当我使用
时var ar = _context.AcquireToken(resource, clientId, returnUri);
它会打开提示输入用户名和密码。如果我正确输入它们,我会得到一个有效的AccessToken,一切都很好。
当我现在尝试通过UserCrendtial输入代码中的凭据时:
var credential = new UserCredential("username", "password");
var ar = _context.AcquireToken(resource, clientId, credential);
但是当我使用直接输入的凭据进行尝试时,两者都会导致错误。
AADSTS65001:未配置访问用户信息的权限 for' 4915f024-blah-blah-blah-f580ab5b0487'申请,或者是 已过期或已撤销。
我尝试过UserCredential的正常(string, string)
和(string, SecureString)
重载。
我尝试使用完全相同的用户名和组合组合密码,我在提示中输入的,来自AcquireToken的第一个重载。
我还试图在Azure中为Application提供所有委托权限:
并添加了具有权限的Windows Azure服务管理API应用程序:
没有任何帮助。
作为旁注,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应用程序以适应所有不同的本地客户端#s
答案 0 :(得分:0)
不确定是否属于您的情况,但您可以使用:
了解更多信息,请参阅ms文档和示例;
答案 1 :(得分:-2)
直接使用用户名和密码存在重要限制,请确保您不会遇到http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/中列出的任何内容。 另请注意,不需要显示用户同意屏幕(如您所描述的所有权限)或特定的消歧步骤(如尝试使用X中的访客用户访问受租户Y保护的资源)都可以使用。 你的情景是什么?您想使用用户名/密码而不是更灵活的浏览器弹出窗口的任何特定原因?