【问题标题】:passport-azure-ad: which strategy to use护照天蓝色广告:使用哪种策略
【发布时间】:2019-11-08 17:12:27
【问题描述】:

我们在 AngularJS 中开发了前端,在 NodeJs 中开发了后端 API。我们使用 Azure AD 进行身份验证。前端 Angular 使用 adal-angular javascript 库进行天蓝色身份验证。因此,当用户访问网站时,他会被重定向到https://login.microsoftonline.com,并且在成功验证后,他会被重定向回我们的网站。到目前为止一切顺利。
我必须使用 passport-azure-ad 库来保护后端 api。只有前端调用这些 API。使用此库有两种可用的策略
1> OAuth2Bearer 策略
2> OIDCStrategy for 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 令牌。


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

【问题讨论】:

    标签: node.js adal azure-active-directory


    【解决方案1】:

    我维护passport-azure-ad。这里的区别在于“授权”和“认证”。

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

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

    当您连接到 Web API 时,用户很可能已经拥有身份(他们已经通过身份验证),现在您只想确保用户可以访问 API( 授权)。 OAuth2 用于保护资源并使用来自 IdP 的令牌以确保令牌有效并且用户有权访问该资源。 Bearer 只是我们(和行业)用于 OAuth2 的令牌类型。如果有人在没有令牌的情况下来找您,您会拒绝他们,然后由打电话给您的客户知道将他们带到哪里以获得您需要的正确令牌。

    OpenID Connect 建立在 OAuth2 之上,纯粹是为了让人们登录并获取您最终将发送到 Web API 的令牌(这反过来将使用 OAuth2 和 Bearer 令牌)。所以 OpenID Connect 用于身份验证

    在您的场景中,您使用的是 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/

    如果您有任何其他问题,请告诉我!

    【讨论】:

    • 这确实有助于选择要使用的策略。但是“passport-azure-ad”正在使用 bunyan。我正在使用 Visual Code 进行开发和调试。当我通过 Visual Code 运行时,我的应用程序刚刚停止启动并且问题是“bunyan”并且有人已经在这里发布了问题stackoverflow.com/questions/36089897/…(是否有任何解决方法而不更新 node.js 版本?我使用的是节点版本 4.2.6)
    • 很高兴它有帮助。那你可以投票作为答案吗?至于解决方法,您可以轻松地从 app.js 文件中删除记录器,这应该会使其消失。有趣的是 4.2.6 和流。
    • 谢谢!!。 “passport-azure-ad”节点模块中没有 app.js 文件。有 oidcsetup.js 文件正在创建记录器实例。但是如果我删除变量“log”,那么无论模块使用 log.info() 方法,模块都会失败。请注意,我的应用程序不使用 bunyan,因此我的应用程序中没有任何参考。你提到了哪个 app.js 文件?
    • @BrandonWerner 我想从 Azure 获取 JWT id_token 和 access_token。我计划在网站的 cookie 中设置 JWT,然后用作我的 rest api 的承载。我计划存储访问/刷新服务器端。我需要在 OIDCStrategy 的 response_type 中指定“code id_token”是否正确?此外,如何让 JWT 脱离该策略,然后在 REST api 路由上与 OAuth2Bearer 策略一起使用?
    • @ProdigousRanger 你认为你可以问我一个单独的问题吗?这样它可以对其他人更有用!
    猜你喜欢
    • 2016-08-06
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多