passport-azure-ad:使用哪种策略

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

我们在AngularJS中开发了前端,在NodeJ中开发了后端API。我们正在使用Azure AD进行身份验证。前端Angular正在使用adal-angular JavaScript库进行天蓝色身份验证。因此,当用户访问网站时,他将被重定向到https://login.microsoftonline.com,并且在成功通过身份验证后,他将被重定向回到我们的网站。到现在为止还挺好。我必须使用passport-azure-ad库来保护后端api。只有前端在调用这些API。使用此库有两种策略1> OAuth2Bearer策略2> OIDC Open ID Connect的策略

我印象深刻,Azure AD默认使用OpenID Connect进行身份验证。所以我打算使用OIDCStrategy保护Node Web api为discussed here但是在小提琴手中,我看到以下请求客户端(即角度前端)在调用Web API时发出了请求

GET http://localhost:4030/api/getemployees HTTP/1.1  
Host: localhost:4030  
Connection: keep-alive  
Accept: application/json, text/plain, */*  
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36  
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi………………………  
Referer: http://localhost:4030/  
Accept-Encoding: gzip, deflate, sdch  
Accept-Language: en-US,en;q=0.8  

Note Authorization标签以“ Bearer”开头,因此我假设客户端正在向服务器发送Bearer令牌。

Q1>我应该在这里使用哪种策略?2>我们什么时候应该使用另一个?

node.js adal azure-active-directory
2个回答
11
投票

我维持passport-azure-ad。此处的区别在于“授权”和“身份验证”之间。

OAuth2用于授权(我可以访问吗?)。

[OpenID Connect用于身份验证(这是我的身份)。

当您连接到Web API时,该用户很可能已经具有一个标识(他们已经通过authentication),现在您只想确保该用户可以访问这些API(授权] >)。 OAuth2用于保护资源,并使用来自IdP的令牌来确保令牌有效,并且用户可以访问该资源。不记名只是我们(和行业)用于OAuth2的令牌类型。如果有人根本没有令牌来找您,您会拒绝他们,然后由客户决定让您知道将他们带到何处以获得所需的正确令牌。

OpenID Connect建立在OAuth2的基础上,纯粹是用于登录人员并获取令牌,然后您将这些令牌最终发送到Web API(这反过来将OAuth2与Bearer令牌一起使用)。因此,OpenID Connect用于authentication

在您的方案中,您使用的是Angular,它正在为您执行OpenID Connect身份验证,因此您的Web API应该使用Bearer策略。

我已经编写了一个示例,可以指导您完成所有这些操作:https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-nodejs/使用MEAN堆栈,并使用我作为前端编写的iOS示例应用程序。结合使用这两种方法,很容易看出其中一个是如何充当身份验证文件(iOS应用程序),而另一个是如何坐在那里并保护用作身份验证文件的API(node.js应用程序)]

node.js应用程序的代码:https://github.com/Azure-Samples/active-directory-node-webapi

iOS应用的代码:https://github.com/Azure-Samples/active-directory-ios

深入探讨这些主题在这里:https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/

让我知道是否还有其他问题!


0
投票

我最近用node实现了一个。您可以在这里参考我的答案

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