
Azure Active Directory(Azure AD)是业界流行的企业级身份验证服务. 如今,许多组织正在使用该服务为应用程序启用单点登录(SSO)并保护他们提供的Web API. 其中,基于OpenId Connect(OIDC)身份验证的Microsoft Identity Platform 2.0是OAuth 2.0授权过程的最新改进版本.
如果您的应用程序使用Azure AD的以下功能,则本文仅向您介绍如何为多个Web API提供授权:
1. 启用单点登录(OpenId Connect身份验证).
2. 使用OAuth 2授权(隐式授权流)来保护Web API.
3. 单个客户端应用程序使用多个Web API提供程序.
首先web调用客户端程序,假设您的客户端应用程序属于单个页面体系结构(单页面体系结构,例如Angular SPA),并且该体系结构使用以下两种不同的API:
1. Microsoft Graph API(dzone.com/articles/getting-access-token-for-microsoft-graph-using-oau?preview=true)-获取员工资料的详细信息并将其显示在应用程序的程序GUI中. 此过程需要获取访问令牌并通过Graph API调用提交.
2. 自定义Web API-服务于应用程序的基本功能和数据. 对于每个Web API调用,必须获取并提交一个不同的单独的访问令牌.
很明显,应用程序的用户必须先使用Azure AD进行身份验证(OIDC,dzone.com / articles / integrating-okta-oauth-20-oidc-with-mulesoft-anypo),然后才能访问受保护的API. 功能和数据. 换句话说,他们必须先传递有效的JWT访问令牌,然后才能访问受保护的API.
在Azure Portal中执行SPA应用程序的注册
第一步是在Azure门户(portal.azure.com/#home)中注册客户端应用程序(SPA). 注意: 请为您的SPA应用程序设置重定向URI,并为隐式授权的OAuth 2数据流选择ID令牌和Access令牌. 下图是假设的Web应用程序的屏幕截图,供您参考:


指定URI路由
在Azure门户中发布Web API
为Web API定义以下配置.
1. 自定义Web API的范围,以控制其对受API保护的功能的访问.
2. 授权可以调用Web API的客户端应用程序,以便在调用过程中无需人工判断.

发布API
为Azure Portal中的客户端应用程序指定API权限
选择用于调用客户端应用程序的API的所有权限. 如果需要获取用户的配置文件,请选择带有User.Read的Microsoft Graph API. 如下面的屏幕截图所示:


请求Microsoft Graph API的权限
以相同的方式web调用客户端程序,选择Web API和自定义API的权限范围.

请求Web API权限
从Angular SPA调用Microsoft Graph API
我们假设的Angular SPA(dzone.com/articles/angular-tutorials-and-articles)将调用Graph API来获取用户的详细信息. 当然,您也可以在Angular应用程序中使用任何类型的身份验证客户端库,例如:
在这里值得注意的是,Microsoft Graph API和自定义Web API是两种不同的API类型,因此它们的范围不能合并到同一Angular应用程序中的同一Azure AD中. 进行授权呼叫. 因此,正确的方法应该是: 使用两个单独的调用. 也就是说: 调用一次Microsoft Graph API和Web API,并为每次调用指定一个不同的范围.
以下是调用Microsoft Graph API的特定顺序和步骤:
对于从Angular到Azure AD OAuth 2.0授权端点的首次调用,请指定User.Read的范围.


指定User.Read的范围
2. Azure AD执行用户身份验证.
3. Azure AD生成访问令牌,该访问令牌可以基于用户配置文件的详细信息调用Graph API的相应权限. 同时,它还会生成一个ID令牌,以指示用户登录.
4. 注意: 在v2.0中,Azure AD在内部调用userinfo Graph API. 获取和返回的用户详细信息只是基本的用户属性. 稍后,我们可以显式调用另一个Graph API端点,以获得用户的详细属性信息.
5. 在Azure AD重定向请求中,我们将基于Angular代码获取相应的访问令牌. 通过调用Graph API,我们将此令牌的授权标头(Authorization标头)设置为Bearer类型令牌. 据此,API将返回用户的个人数据的详细信息,包括: 员工编号,照片和组织结构.
以下示例是对Graph API端点的HTTP GET请求,该请求可以获取用户的员工编号. 注意: Bearer类型令牌应在请求的授权标头中传递.
https://graph.microsoft.com/v1.0/me$,userPrincipalName,国家/地区,extension_8b4e685f580748b59864d62c2e7fcfad_employeeNumber
从Angular SPA调用自定义Web API
具体顺序和步骤如下:
1. 指定mystatementapi / access_as_user的范围(尽管可以是任何范围,但是最好在注册过程中匹配Azure AD门户中应用程序定义的范围). 此范围将用于调用Azure AD OAuth 2.0的第二个授权终结点.


指定user_as_access的范围
2. 注意: 由于我们的浏览器已在上一次调用中设置了身份验证Cookie,因此此步骤将不再执行用户身份验证.
3. Azure AD生成另一个具有访问权限的访问令牌,以调用Web API. 该令牌将用于每个Web API.
4. 在Azure AD重定向请求中,我们将基于Angular代码获取相应的访问令牌. 通过调用自定义API,我们将此令牌的授权标头(Authorization标头)设置为Bearer类型令牌.
5. Web API验证来自Azure AD的令牌. 如果验证成功,则返回正常响应消息. 如果失败,则通知错误.
刷新访问令牌
通常,访问令牌的有效期很短. 我们可以将令牌过期时间配置为一小时或更短. 然后,在令牌过期之前,客户端应用程序应从Azure AD请求新的访问令牌. 此外,该过程应在后台自动完成,而无需用户干预. 因此,我们可以在客户端应用程序中使用隐藏的iframe方法.
实际上,对于用于调用这些自定义Web API的访问令牌(显然是本示例中前面提到的Graph API),这显然是必需的.
摘要
上面提到的Azure AD充当基于云的身份认证服务. 您可以将应用程序部署到其他云服务或本地数据中心,以实现个性化的身份验证和授权. 当然,在开始编写Angular应用程序代码之前,还可以使用Postman客户端(译者注: 功能强大的Web调试和界面测试工具)来测试和验证Azure AD和各种Web API的配置.
通常,通过上述详细的设计方法和实现步骤,我们演示了Angular客户端应用程序如何从不同的Web API获取OAuth 2类型授权. 希望对您有所帮助.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-262524-1.html
确实帅
他还敢来吗
蔡要是敢