如何使用Azure AD授权Node.js API?

问题描述 投票:4回答:3

我们有使用MEAN堆栈编写的应用程序。 目前,应用程序正在使用本地身份验证。 我们正在尝试使用Azure AD身份验证替换它。

有很好的文章在这里展示了如何使用ADAL.JS库Azure的身份验证配置角度。 这将保护客户端资源。 在示例中,服务器端API使用.Net Web API编写,OWIN用于保护Web API。 因此,OWIN负责验证来自客户端的Bearer令牌发送。

使用MEAN堆栈,服务器端API是用Node.js编写的,那么如果我们切换到Azure AD,我们如何保护Node.js API呢? Microsoft是否提供任何Node模块? 任何一个例子都会很有用。

angularjs node.js azure mean-stack azure-active-directory
3个回答
2
投票

Microsoft提供了一个护照插件, passport-azure-ad

passport-azure-ad是Passport Strategies的集合,可帮助您与Azure Active Directory集成。 它包括OpenID Connect,WS-Federation和SAML-P身份验证和授权。 这些提供程序允许您将Node应用程序与Microsoft Azure AD集成,以便您可以使用其许多功能,包括Web单点登录(WebSSO),Endpoint Protection with OAuth以及JWT令牌颁发和验证。


0
投票

本文在角度脚本中配置AAD租户信息,这些信息将从客户端公开这些信息,这增加了泄露敏感信息的风险。

您可以考虑存储所有信息,并在Node.js应用程序的后端运行身份验证和授权流程。 并且只为前端角客户端暴露Apis。

您可以参考O365在gitHub上提供的使用ADAL模块的示例。 主要的身份验证和授权流程在https://github.com/OfficeDev/O365-Nodejs-Microsoft-Graph-Connect/blob/master/authHelper.js上编写。

在Node.js的请求中使用访问令牌可以参考https://github.com/OfficeDev/O365-Nodejs-Microsoft-Graph-Connect/blob/master/requestUtil.js

更新

我发现ADAL.js的设计遵循oauth2认证,通过id_token的响应类型。 这意味着它只会暴露tenantId和AAD应用程序clientId,这些不是那么敏感的信息。 并且ADAL.js将在html5 sesstionStorage中存储access_token和几个用户信息。 您可以参考http://www.cloudidentity.com/blog/2015/02/19/introducing-adal-js-v1/http://www.cloudidentity.com/blog/2014/10/28/adal -javascript-and-angularjs-deep-dive /了解更多信息。

关于ADAL.js用法,您可以使用自己的逻辑通过后端应用程序中的JWT解析访问令牌,您可以参考https://github.com/matvelloso/AADNodeJWT上的示例。

同时,在我看来,您可以将MEAN应用程序分成2个独立的Azure Web应用程序。 一个用于构建Angular App作为前端,另一个用于托管Expressjs Node.js App作为我们整个Web应用程序架构的后端。

在后端Web App服务中,您可以使用Azure Active Directory作为身份验证提供程序来保护Web Apis。 有关详细信息,请参阅https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-active-directory-authentication/

在前端Web App服务中,您可以在Angular应用程序中使用adal.jsadal-angular.js进行身份验证和授权。您可以参考https://github.com/matvelloso/AADNodeJWT的前端部分。

当您成功完成身份验证流程时, adal.js插件会将adal.js存储在html5 sesstionstorage idtoken中,因此我们可以利用此令牌来请求受AAD保护的后端应用程序:

var token = sessionStorage.getItem('adal.idtoken');
$http.defaults.headers.common.Authorization= 'Bearer '+token;
$http.get('https://<your_backend_apis>').then(function (data){
      console.log(data);
})

0
投票

要使用Azure AD授权Node.js服务器,可以使用node.js中的adal-node库。

以下示例将逐步演示使用Azure AD验证Node.js:
https://code.msdn.microsoft.com/How-to-authorize-Nodejs-fdc580ed

© www.soinside.com 2019 - 2024. All rights reserved.