passport-azure-ad:使用哪种策略
passport-azure-ad: which strategy to use
我们在 AngularJS 中开发了前端,在 NodeJs 中开发了后端 APIs。我们使用 Azure AD 进行身份验证。前端 Angular 正在使用 adal-angular javascript library for azure authentication. So when user comes to web site, he gets redirected to https://login.microsoftonline.com,在成功验证后,他将被重定向回我们的网站。到目前为止一切顺利。
我必须使用 passport-azure-ad 库来保护后端 api。只有前端调用这些 APIs。使用这个库有两种策略可用
1> OAuth2Bearer 策略
2> Open ID Connect 的 OIDCStrategy
我的印象是 Azure AD 默认使用 OpenID Connect 进行身份验证。所以我打算使用 OIDCStrategy 来保护 Node web api as discussed here
但是在 fiddler 中,我看到以下请求客户端(即 angular 前端)在调用 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>我们什么时候应该使用一个而不是另一个?
我维持passport-azure-ad
。这里的区别是 "authorization" 和 "authentication"。
OAuth2用于授权(我可以访问这个吗?)。
OpenID Connect用于身份验证(这就是我)。
当您连接到网络 API 时,用户很可能已经拥有身份(他们已经通过 身份验证 ),现在您只想确保用户有权访问 APIs (授权)。 OAuth2 用于保护资源并使用来自 IdP 的令牌以确保令牌有效并且用户有权访问该资源。 Bearer 只是我们(和行业)用于 OAuth2 的令牌类型。如果有人根本没有令牌就来找您,您会拒绝他们,然后由打电话给您的客户知道将他们带到哪里以获得您需要的正确令牌。
OpenID Connect 建立在 OAuth2 之上,纯粹是为了让人们登录并获取您最终将发送到 Web API 的令牌(这又会使用带有 Bearer 令牌的 OAuth2)。所以 OpenID Connect 用于 身份验证。
在您的场景中,您正在使用 Angular 为您执行 OpenID Connect 身份验证,因此您的 Web APIs 应该使用 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/
如果您有任何其他问题,请告诉我!
我们在 AngularJS 中开发了前端,在 NodeJs 中开发了后端 APIs。我们使用 Azure AD 进行身份验证。前端 Angular 正在使用 adal-angular javascript library for azure authentication. So when user comes to web site, he gets redirected to https://login.microsoftonline.com,在成功验证后,他将被重定向回我们的网站。到目前为止一切顺利。
我必须使用 passport-azure-ad 库来保护后端 api。只有前端调用这些 APIs。使用这个库有两种策略可用
1> OAuth2Bearer 策略
2> Open ID Connect 的 OIDCStrategy
我的印象是 Azure AD 默认使用 OpenID Connect 进行身份验证。所以我打算使用 OIDCStrategy 来保护 Node web api as discussed here
但是在 fiddler 中,我看到以下请求客户端(即 angular 前端)在调用 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>我们什么时候应该使用一个而不是另一个?
我维持passport-azure-ad
。这里的区别是 "authorization" 和 "authentication"。
OAuth2用于授权(我可以访问这个吗?)。
OpenID Connect用于身份验证(这就是我)。
当您连接到网络 API 时,用户很可能已经拥有身份(他们已经通过 身份验证 ),现在您只想确保用户有权访问 APIs (授权)。 OAuth2 用于保护资源并使用来自 IdP 的令牌以确保令牌有效并且用户有权访问该资源。 Bearer 只是我们(和行业)用于 OAuth2 的令牌类型。如果有人根本没有令牌就来找您,您会拒绝他们,然后由打电话给您的客户知道将他们带到哪里以获得您需要的正确令牌。
OpenID Connect 建立在 OAuth2 之上,纯粹是为了让人们登录并获取您最终将发送到 Web API 的令牌(这又会使用带有 Bearer 令牌的 OAuth2)。所以 OpenID Connect 用于 身份验证。
在您的场景中,您正在使用 Angular 为您执行 OpenID Connect 身份验证,因此您的 Web APIs 应该使用 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/
如果您有任何其他问题,请告诉我!