passport-azure-ad / msal.js 和动态作用域

问题描述 投票:0回答:1

Azure AD v2.0 讨论了动态同意的优点之一(https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/api-scopes#request-dynamic-scopes-for -增量同意)。

这应该是什么样子?我认为一个典型的用例是提供适用于某个端点的角色/范围。例如

@OAuthBearer()
注释:

@Get("/hello-auth")
@OAuthBearer({"scopes": ["app.special.scope"]})
helloAuth() {
    return {text: "Authorised hello"};
}

我找不到任何有关如何执行此操作的信息。在我看来(查看协议图https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow#protocol-diagram

passport-azure-ad
进行的唯一活动是接收不记名令牌并验证它。这是有道理的,但是注释的范围如何评估,因为它们是服务器端的,因此客户端不知道是否包含在令牌中?

我在https://github.com/AzureAD/passport-azure-ad/issues/430问了这个问题,但我的合同下周结束,我想完成这个任务,所以交叉发布了这个。

就像在那篇文章中一样,我想过使用

msal.js
库,但也不知道如何实现它。

这个问题有没有最好的方法?

azure azure-active-directory azure-ad-msal
1个回答
0
投票

对于那些仍在寻找解决方案的人,这对我有用。

  1. 单独定义策略选项。
    const strategyOptions = {
       identityMetadata: MicrosoftCredentials.identityMetadata,
       clientID: env.client_id,
       clientSecret: env.client_secret,
       scope: ["email", "profile", "offline_access"],
       ...
    }
  1. 制定策略
    passport.use(new AzureAd.OIDCStrategy(strategyOptions, verifyCallback));
  1. 在调用
    passport.authenticate
    之前添加 API 调用所需的范围。示例:
      strategyOptions.scope += " Calendars.ReadBasic";

      return passport.authenticate('azuread-openidconnect', {})
© www.soinside.com 2019 - 2024. All rights reserved.