Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过用户名&;从Azure广告获取AccessToken;密码_C#_Adal - Fatal编程技术网

C# 通过用户名&;从Azure广告获取AccessToken;密码

C# 通过用户名&;从Azure广告获取AccessToken;密码,c#,adal,C#,Adal,我在Azure广告中注册了一个本地客户端 当我使用 var ar = _context.AcquireToken(resource, clientId, returnUri); 它会打开用户名和密码提示。如果输入正确,我将获得一个有效的AccessToken,一切正常 当我现在试图通过UserCrendtial在代码中输入凭据时: var credential = new UserCredential("username", "password"); var ar = _context.Ac

我在Azure广告中注册了一个本地客户端

当我使用

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租户的权限。要读写列表项,我不知道这是否相关。我要传递的资源是SharePoint地址

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

编辑:

体系结构:

说明:

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

Web Api项目需要从SharePoint O365租户读取、创建、更新和删除数据。这里我需要AccessToken初始化ClientContext或通过rest响应发送I

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


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

直接使用用户名和密码有重要限制,请确保您没有遇到中列出的任何限制。 另外请注意,不需要显示用户同意屏幕(正如您描述的所有权限)或特定的消除歧义步骤(如尝试使用来自X的来宾用户访问受租户Y保护的资源)即可。
你的设想是什么?您希望使用用户名/密码而不是更灵活的浏览器弹出窗口的具体原因是什么?

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

  • 内置身份验证(在webapp选项中设置“开启”;然后创建express应用或/然后选择具有相同应用ID的高级模式)
  • 然后添加广告原生客户端app
  • 登录到old classic portal,选择本机应用程序,并在配置中添加对express/advacsed web应用程序的访问权限
  • 之后,您将能够在浏览器中登录;使用adal lib,您可以通过移动设备登录访问api

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

所以,您不需要代表用户执行操作,对吗?你能用吗?我们在应用程序中使用它,它工作得很好。