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
库,但也不知道如何实现它。
这个问题有没有最好的方法?
对于那些仍在寻找解决方案的人,这对我有用。
const strategyOptions = {
identityMetadata: MicrosoftCredentials.identityMetadata,
clientID: env.client_id,
clientSecret: env.client_secret,
scope: ["email", "profile", "offline_access"],
...
}
passport.use(new AzureAd.OIDCStrategy(strategyOptions, verifyCallback));
passport.authenticate
之前添加 API 调用所需的范围。示例: strategyOptions.scope += " Calendars.ReadBasic";
return passport.authenticate('azuread-openidconnect', {})