我正在尝试以单租户模式运行active-directory-dotnet-webapi-onbehalfof示例。我已将Web应用程序服务和本机应用程序客户端注册为租户的全局管理员。当我作为租户中的用户运行示例时,我只能在同意弹出(用户第一次)后才能在客户端获取令牌,然后调用将其发送到服务,但是在下面失败了。这是为什么?文档说,当租户管理员注册申请时,不需要进一步的同意?当远程webapi尝试获取OBO令牌时,我认为不可能同意。似乎有些东西...... AAD团队,请说明应该如何使用OBO功能。
AADSTS65001:用户或管理员未同意使用ID为“b824502e-fe8a-4770-bd98-8d65a07efcc3”的应用程序。发送此用户和资源的交互式授权请求。 跟踪ID:ad7843d0-be4e-4098-8f7c-43c8e5505cfc 相关ID:140466a4-7250-429f-8843-dbd4f63dc60e 时间戳:2016-11-25 21:46:13Z
答案 0 :(得分:1)
当您使用Azure管理门户(manage.windowsazure.com)作为租户管理员注册应用程序时,只要在同一租户中检索后续令牌,您就不应该获得同意。
因为您看到了对本机客户端应用程序的同意,然后收到该错误消息,我们必须假设某些内容未得到满足,这会抑制您的应用程序的同意。
要解决此问题,我的建议是简单地启动交互式授权请求,就像错误消息所暗示的那样。您可以通过为应用程序生成登录URL来执行此操作,并使用特定的查询字符串强制提示租户广泛同意(prompt = admin_consent)。
以下是您需要完成的网址的骨架:
https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent
您可以为您注册的所有应用程序执行此操作,并且不应遇到同意问题(假设您确实以租户管理员身份登录)。
我希望这可以解决您的问题。