Javascript 401-使用passport-Azure-AD-oauth2未经Azure AD授权

Javascript 401-使用passport-Azure-AD-oauth2未经Azure AD授权,javascript,typescript,oauth-2.0,passport.js,passport-azure-ad,Javascript,Typescript,Oauth 2.0,Passport.js,Passport Azure Ad,我正在尝试使用oauth2策略设置passport,使用针对azure ad的“passport-azure-ad-oauth2”。它可以与一个租户一起使用,但不能与另一个租户一起使用,即使它们的设置方式完全相同 在被重定向到Azure AD登录并输入用户名+密码后,我被重定向到failureRedirect。如果我禁用failureRedirect,我将被发送到一个类似以下内容的URLhttp://localhost:3006/auth/login/azure/return?code=“此处为

我正在尝试使用oauth2策略设置passport,使用针对azure ad的“passport-azure-ad-oauth2”。它可以与一个租户一起使用,但不能与另一个租户一起使用,即使它们的设置方式完全相同

在被重定向到Azure AD登录并输入用户名+密码后,我被重定向到failureRedirect。如果我禁用failureRedirect,我将被发送到一个类似以下内容的URLhttp://localhost:3006/auth/login/azure/return?code=“此处为我的令牌”&session\u state=“我的会话状态”

Azure发布了我的令牌,但当我被发送到returnURL时,我只是得到了“未经授权”,并且我从未到达回调,因此无法注销任何错误

Azure AD manifest.json
{
“id”:“9c3我的uuid”,
“acceptMappedClaims”:空,
“accessTokenAcceptedVersion”:2,
“附件”:[],
“allowPublicClient”:空,
“appId”:“82b我的uuid”,
“批准”:[],
“oauth2AllowUrlPathMatching”:false,
“createdDateTime”:“2020-07-27T10:44:50Z”,
“groupMembershipClaims”:空,
“鉴定人”:[
"api://82b-my-uuid"
],
“信息系统”:{
“termsOfService”:空,
“支持”:空,
“隐私”:空,
“营销”:空
},
“密钥凭据”:[],
“knownClientApplications”:[],
“logoUrl”:空,
“logoutUrl”:空,
“名称”:“我的公司”,
“oauth2AllowIdTokenImplicitFlow”:true,
“oauth2AllowImplicitFlow”:正确,
“oauth2Permissions”:[
{
“AdminApproverDescription”:“允许应用读取用户信息”,
“管理员姓名”:“读取用户信息”,
“id”:“c39我的uuid”,
“isEnabled”:没错,
“lang”:空,
“来源”:“申请”,
“类型”:“用户”,
“UserDescription”:“允许应用程序读取用户信息”,
“用户名”:“读取用户信息”,
“值”:“demo.read”
}
],
“OAuth2Requiresponse”:false,
“选择性索赔”:{
“idToken”:[],
“accessToken”:[],
“saml2Token”:[]
},
“组织限制”:[],
“ParentalControl设置”:{
“被封锁的国家”:[],
“legalAgeGroupRule”:“允许”
},
“密码凭据”:[
{
“customKeyIdentifier”:空,
“结束日期”:“2299-12-30T23:00:00Z”,
“密钥ID”:“e07我的密钥”,
“起始日期”:“2020-07-27T10:57:53.945Z”,
“值”:空,
“createdOn”:“2020-07-27T10:57:55.4720906Z”,
“提示”:“.jq”,
“displayName”:“我的displayName”
}
],
“预授权应用程序”:[
{
“appId”:“82b我的uuid”,
“许可证ID”:[
“c39我的uuid”
]
}
],
“publisherDomain”:“my domain.com”,
“replyUrlsWithType”:[
{
“url”:”http://localhost:3006/auth/login/azure/return",
“类型”:“Web”
},
{
“url”:”http://localhost:3006/customer/auth/login/azure/return",
“类型”:“Web”
}
],
“requiredResourceAccess”:[
{
“resourceAppId”:“00000003-0000-0000-c000-000000000000”,
“资源访问”:[
{
“id”:“64a6cdd6-aab1-4aaf-94b8-3cc8405e90d0”,
“类型”:“范围”
},
{
“id”:“37f7f235-527c-4136-accd-4a02d197296e”,
“类型”:“范围”
},
{
“id”:“14dad69e-099b-42c9-810b-d002981feec1”,
“类型”:“范围”
},
{
“id”:“e1fe6dd8-ba31-4d61-89e7-88639da4683d”,
“类型”:“范围”
}
]
}
],
“samlMetadataUrl”:null,
“signInUrl”:空,
“重大事件”:“AzureADMyOrg”,
“标签”:[],
“tokenEncryptionKeyId”:空,
“受信任的证书主体”:[],
“验证发布者”:{
“displayName”:空,
“verifiedPublisherId”:空,
“AddedDataTime”:空
}
}
导出类用户路由器{
公用路由器:路由器;
private azureAdOauth2=新azureAdOauth2策略(
{
clientID:process.env.AZURE_OAUTH_CLIENT_ID,
clientSecret:process.env.AZURE_OAUTH_CLIENT_SECRET,
回调URL:“/auth/login/azure/return”,
租户:process.env.AZURE_OAUTH_租户,
},
异步(accessToken、refreshToken、params、profile、done)=>{
const decodedToken=jwt.decode(accessToken);
wait Utils.checkLogin({email:decodedToken.email,密码:null,localUser:false,isInternal:true})
。然后(用户=>{
const permissions=Utils.populatePermission(用户);
const token=issueJWT(用户);
常量访问对象={
代币
用户,
权限,
};
返回完成(null,accessObject);
})
.catch(错误=>{
返回完成(null、false、error);
});
}
);
构造函数(){
this.router=router();
this.init();
}
公共init(){
this.router.use(cors());
this.router.post('/login',AuthController.login);
这是路由器(
“/login/azure”,
passport.authenticate(
这是azureAdOauth2,
{会话:false,提示:“选择帐户”},
(错误、用户、信息)=>{
控制台日志(err);
}
)
);
这是路由器(
“/login/azure/return”,
passport.authenticate(this.azureAdOauth2{
会话:错误,
法鲁