我们在AngularJS和NodeJs中的后端API中开发了前端。我们使用Azure AD进行身份验证。前端Angular正在使用adal-angular javascript库进行azure身份验证。因此,当用户访问网站时,他会被重定向到https://login.microsoftonline.com,并且在成功进行身份验证后,他会被重定向回我们的网站。到目前为止一切顺利。
我必须使用passport-azure-ad库来保护后端api。只有前端才调用这些API。使用此库有两种策略
1 GT; OAuth2Bearer策略
2 - ; OIDCStrategy用于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
注意授权标签以“Bearer”开头,所以我假设客户端正在向服务器发送Bearer令牌。
Q
1>我应该在这里使用哪种策略?
2>我们何时应该使用另一个?
答案 0 :(得分:9)
我维持passport-azure-ad
。这里的区别在于“授权”和“身份验证”。
OAuth2 用于授权(我有权访问此内容吗?)。
OpenID Connect 用于身份验证(这就是我自己)。
当您连接到Web API时,用户很可能已经拥有身份(他们已通过身份验证),现在您只想确保用户可以访问API(的授权强>)。 OAuth2用于保护资源并从IdP中使用令牌,以确保令牌有效并且用户可以访问该资源。承载只是我们(和行业)用于OAuth2的令牌类型。如果有人在没有令牌的情况下来找你,你会拒绝它们,然后由客户打电话给你知道在哪里拿到它们以获得你需要的正确令牌。
OpenID Connect构建于OAuth2之上,纯粹用于记录人员并获取您最终将发送到Web API的令牌(后者将使用带有承载令牌的OAuth2)。因此,OpenID Connect用于身份验证。
在您的方案中,您正在使用Angular,它正在为您执行OpenID Connect身份验证, 因此您的Web API应该使用The Bearer策略。
我已经编写了一个示例,它将引导您完成所有这些:使用MEAN堆栈的https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-nodejs/,它使用我作为前端编写的iOS示例应用程序。使用这两者,很容易看出一个人如何充当身份验证部分(iOS应用程序),另一个坐在那里并保护充当授权部分的API(node.js应用程序)
node.js app的代码: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/
如果您有任何其他问题,请与我们联系!