繁体   English   中英

多个WebApi端点的Azure AD承载令牌?

[英]Azure AD Bearer Token For Multiple WebApi Endpoints?

我们使用Angular,.Net WebApi和Azure来构建多个应用程序。 我们一直在做的是通过隐式oAuth2 / OIDC授权流程通过Azure AD保护应用程序。

事情进展顺利,但到目前为止我们已经有了一个简单的架构。 IE'前端App1' - >'WebApi App1'

当我们向AAD请求令牌时,我们在令牌请求中发送资源(“WebApi App1”的应用程序ID)。 看来这是令牌请求中的必需属性。 这是如何扩大的?

假设我们遇到'前端App1'需要与'WebApi App1'和'WebApi App2'交谈的情况。 我们需要发出多个令牌请求吗? 在Azure中,人们在这些情况下做了什么? 将承载令牌紧密地耦合到一个资源似乎很难。

似乎另一种方法是我可以将api应用程序配置为验证相同Azure租户和应用程序ID的令牌。 这样,令牌对任何一个应用程序都有好处,但这也不是很灵活,因为这意味着任何一个应用程序的所有令牌都有利于另一个...

您有两种选择:

  1. 获得两个令牌
  2. 对两个API使用相同的应用程序ID

获取每个API的令牌是正常的方法。

Azure AD中的承载令牌始终仅对一个API有效。 它可以包含该API上的调用用户/应用程序的范围/角色,这些值是应用程序清单中定义的简单字符串,例如User.Read。 这些值可以在API之间重叠,因此我们不能拥有对两个API有效的令牌。

问题陈述:如何使用UI应用程序中的相同令牌调用多个WebApi。

我的解决方案

让我们有两个Web-Api,WebApi01和WebApi02。 在Azure AD中,我只注册了一个应用程序,而不是注册两个应用程序,比如MasterAPI。 此外,客户端应用程序即UI应用程序必须像往常一样进行注册。

MasterAPI不是实际应用程序。 因此,可能没有任何重定向网址,也不需要任何重定向网址。 在此API中,我们为每个WebAPI(WebAPI01和WebAPI02)声明两个作用域。 我通常遵循App.Feature.Verb等命名法。因此,范围名称将类似于Master.WebAPI01.ReadMaster.WebAPI02.Read

它们将像api://MasterAPI-Application-Id//Master.WebAPI01.Readapi://MasterAPI-Application-Id//Master.WebAPI02.Read在azure应用程序注册页面中公开

在Access-Token请求期间,我将这两个范围传递给Azure AD端点。 我得到的响应包含范围声明(scp),其值为“Master.WebAPI01.Read Master.WebAPI02.Read”。

“scp”:“Master.WebAPI01.Read Master.WebAPI02.Read”

这样我就告诉系统,可信的Client-UI应用程序有一个可以访问两个功能的令牌。 简而言之,无论谁登录客户端应用程序,都可以访问这两个功能。 经过身份验证的用户现在有权使用两个功能。

这可以进一步限制。 说,我,管理员,应该控制谁可以访问什么。 为此,我必须实现基于角色的访问控制(RBAC)。 我在MasterAPI中定义了自定义应用程序角色。 这可以通过操纵清单来完成。

现在,当我收到访问令牌时,我获得了带有值集的角色声明。 该值取决于为用户分配的角色。

“roles”:[“Access_WebAPI01”,“Access_WebAPI02”],

令牌通过头传递给资源WebAPI(在本例中为WebAPI01或WebAPI02)。接收器WebAPI然后解析头令牌以检查是否存在所需角色。

因此,简而言之,Scope和RBAC组合对我有用。 而且我不需要为数据库进行身份验证和授权。

如果添加了新功能,例如WebAPI03。 我需要做的就是在MasterAPI中设置范围。 并使用现有角色或为用户分配新角色。

PS:为什么选择MasterAPI? 在Azure AD中,所有范围必须仅来自一个资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM