通过UserName从Azure广告获取访问令牌;密码

时间:2015-03-30 09:23:03

标签: c# adal

我在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服务管理

没有任何帮助。

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

我不需要通过Graph Api访问Azure的任何用户访问权限。我只需要AccessToken就可以访问我们的SharePoint Online。

修改

架构:

enter image description here

说明

我们有一个Web Api项目,负责处理用户授权,负载平衡等。这个Web Api项目将由Native Dekstop客户端或混合HTML5& Javascript移动设备应用。

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

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

在这种情况下,我可能不需要使用用户名/密码获取令牌,但后来​​我不知道如何配置Azure应用程序以适应所有不同的本地客户端#s

2 个答案:

答案 0 :(得分:0)

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

  • 内置身份验证(在webapp选项中设置' on;然后创建Express应用程序或/然后选择具有相同应用ID的高级模式);
  • 然后添加AD本机客户端应用程序;
  • 登录旧的经典门户网站,选择原生应用程序并在配置中添加访问权限快递/推荐的网络应用程序;
  • 之后你就可以在浏览器中登录了;并且adal lib将能够登录以从移动设备访问您的API;

了解更多信息,请参阅ms文档和示例;

答案 1 :(得分:-2)

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