2016-04-11 88 views
4

我们有使用MEAN堆栈编写的应用程序。目前应用程序正在使用本地认证。我们正在尝试将其替换为Azure AD身份验证。如何使用Azure AD授权Node.js API?

有很好的文章here,显示了如何使用ADAL.JS库配置Angular for Azure认证。这将保护客户端资源。在该示例中,服务器端API使用.Net Web API编写,而OWIN用于保护Web API。所以OWIN负责验证来自客户端的承载令牌发送。

在MEAN堆栈中,服务器端API使用Node.js编写,因此如果我们切换到Azure AD,如何保护Node.js API?是否有任何Microsoft模块可用的Node模块?任何示例都将大大受益。

回答

1

微软提供了一个passport插件,passport-azure-ad

护照蔚广告是护照策略的集合,以帮助您Azure的Active Directory集成。它包括OpenID Connect,WS-Federation和SAML-P认证和授权。这些提供程序允许您将Node应用程序与Microsoft Azure AD集成,以便您可以使用其许多功能,包括Web单点登录(WebSSO),带有OAuth的Endpoint Protection以及JWT令牌签发和验证。

0

This article配置角度脚本中的AAD租户信息,这些脚本将从客户端公开这些信息,增加了揭示敏感信息的风险。

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

您可以参考O365提供的样本gitHub,它利用了ADAL模块。 主要认证和授权流程编写在https://github.com/OfficeDev/O365-Nodejs-Microsoft-Graph-Connect/blob/master/authHelper.js

而且你可以参考https://github.com/OfficeDev/O365-Nodejs-Microsoft-Graph-Connect/blob/master/requestUtil.js

更新

我找到ADAL.js被设计在Node.js的请求访问令牌的使用通过id_token的响应类型按照OAuth2验证程序。这意味着它只会暴露TenantId和AAD应用程序clientId,这些信息并不那么敏感。 ADAL.js会将access_token和多个用户信息存储在html5 sesstionStorage中。你可以参考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应用程序分成两个独立的Azure Web应用程序。一个将您的Angular App构建为前端,另一个将您的Expressjs Node.js应用程序作为我们整个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应用服务中,您可以在Angular应用中使用adal.jsadal-angular.js进行身份验证和授权。您可以参考https://github.com/matvelloso/AADNodeJWT的前端部分。

当您成功完成验证流程中,adal.js插件将存储idtokenhtml5 sesstionstorage,所以我们可以利用此令牌请求是由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

感谢加里柳,那是我的下一个问题,因为文章中配置js文件中的敏感信息,这敏感信息可在客户端使用。微软如何推广这样的设计模式?同样的解决方案在这里发布在第9频道由Vittorio Bertocci https://channel9.msdn.com/Shows/Web+Camps+TV/AngularJS-Module-for-Microsoft-Azure-Active-Directory-Authentication可能是我在这里失踪的东西 – LP13

+0

,我还发现了一篇文章,展示如何保护Node API https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-nodejs/但是我对ADAL.js的问题是还在那里,是否有效的设计模式? – LP13

+0

我发现ADAL.js是通过'id_token'响应类型的oauth2认证来设计的。这意味着它只会暴露'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 /更多信息 –

相关问题