azure 使用API权限和使用授权客户端应用程序之间有什么区别

ycggw6v2  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(131)

我已经使用Azure AD超过4年了,就在今天,当我在Azure Entra ID(以前的Azure AD)中设置应用程序时,我看到我可以在Explore an API下添加“授权的客户端应用程序”。
当客户端应用程序需要访问不同应用程序公开的API时,我一直使用API权限。我的做法是在Entra中注册两个应用程序,其中一个暴露出了一些(和/或应用程序角色)而另一个在API权限下有这个作用域。我几乎总是在这个作用域上提供管理员的同意。我在下面放了一些截图来展示它的样子如.
x1c 0d1x设置公开API的作用域


使用范围作为权限的应用程序
几个小时前,我注意到我可以在公开API作用域的同一个屏幕上授权客户端应用程序。但我不知道这是做什么的,也不知道这与我一直在做的有什么不同。我应该在什么样的用例中使用此功能,而不是在客户端应用程序中添加权限?

uinbv5nw

uinbv5nw1#

API权限用于授予对API定义的特定范围或权限的访问权限。当客户端应用程序寻求访问API时,需要用户或管理员提供同意,指定其所需的范围或权限。

  • 客户端应用程序可以使用指定的范围或权限来访问API(当已给予批准时)。

对于sample,我授予了user_impersonation API权限,该权限由Azure服务管理API定义,允许以用户身份访问API:


的数据

授权的客户端应用是指客户端应用受到API的信任,客户端调用API时不需要经过同意。

对于示例,在 * 单租户 * 中,如果将ClientApp添加为授权客户端应用,则当ClientApp调用ServerApp API时,用户可以直接登录,无需经过任何同意:


https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize? 
client_id=ClientID
&response_type=code  
&redirect_uri=https://jwt.ms
&response_mode=query  
&scope=api://ServerAppID/test.read
&state=12345

字符串



多租户场景下,我创建了一个ClientApp,并添加了ServerApp API权限,如下所示:



现在,当我尝试使用其他租户用户登录应用程序时,我得到了错误:

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize? 
client_id=ClientID
&response_type=code  
&redirect_uri=https://jwt.ms
&response_mode=query  
&scope=api://ServerAppID/test.read
&state=12345


AADSTS650052应用程序正在尝试访问您的组织xxx缺少其服务主体的服务xxx(ServerApp)。请与IT管理员联系以查看您的服务订阅的配置或同意应用程序以创建所需的服务主体。



在这种情况下,必须在ServerApp中添加ClientApp作为Authorized client applications
添加完成后,用户即可成功登录:



相关问题