【问题标题】:Passport-Azure-AD not validating access_token from MSAL Angular authenticationPassport-Azure-AD 未从 MSAL Angular 身份验证验证 access_token
【发布时间】:2021-06-01 12:15:59
【问题描述】:

我有一个 Angular 10 应用程序,我正在使用 MSAL-Angular 包对 Azure AD 进行身份验证。它使用授权流程成功验证并检索了access_tokenid_token

我还有一个 Express API 后端,我将 access_token 附加到请求的标头(使用来自 Msal-Angular 的拦截器)。我想验证此令牌以验证 Angular 应用程序在允许访问 api 之前已通过身份验证。为此,我尝试将passport-azure-ad 与 BearerStrategy 一起使用。我相信我的所有设置都正确,但它一直告诉我无法验证令牌。

我发现如果我使用id_token 而不是access_token 可以验证;通过护照策略并使用jwt.io。

所以这里真正的问题是我可以在我的配置中做一些不同的事情来验证使用Msal-Angular 传递的access_token 还是我应该编写自己的拦截器来发送id_token 而不是access_token ?


API Passport 配置代码 - 我在这里要做的就是让护照验证通过,然后填写回调函数。

const options: IBearerStrategyOptionWithRequest = {
  identityMetadata:
    'https://login.microsoftonline.com/{tenet}.onmicrosoft.com/v2.0/.well-known/openid-configuration',
  clientID: '{my_client_id}',
  validateIssuer: true,
  loggingLevel: 'info',
  loggingNoPII: false,
  passReqToCallback: true,
};

const bearerStrategy = new BearerStrategy(options,
  function (req, token, done) {
    logger.debug(req);
    logger.debug(token);

    return done(null, { name: 'user name' }, token);
  });

passport.use(bearerStrategy);

保护路线

function (req, res, next) {passport.authenticate('oauth-bearer', { session: false }),  listTasks);

给出的错误:

{
  "name":"AzureAD: Bearer Strategy",
  "hostname":"my_host",
  "pid":36344,
  "level":30,
  "msg":"authentication failed due to: invalid signature",
  "time":"2021-03-02T20:50:02.140Z",
  "v":0
}

【问题讨论】:

    标签: angular azure-active-directory msal passport-azure-ad


    【解决方案1】:

    我明白了。这与我在 access_token 上获得的范围有关。我使用的是 'user.read''email',当我切换到使用 '{client_id}/.default' 时,可以使用 v1 众所周知的元数据 url 验证生成的令牌。

    总的来说,我对范围仍然有些粗略,但这是我发现导致解决我问题的更改的页面。

    Scopes for a web API accepting v1.0 tokens

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 2020-10-17
      • 2016-04-26
      • 2019-09-24
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多