2017-07-19 55 views
1

我做了一個聊天機器人,我想授權用戶使用OIDCStrategy使用Azure廣告b2c。在控制檯中,它總是記錄authentication failed due to: In collectInfoFromReq: policy is missing。該政策已在Azure中制定。而且我找不到在代碼中聲明策略的地方。這裏是我的服務器:微軟廣告b2c問題:政策缺失

server.get('/login', 
    passport.authenticate('azuread-openidconnect', 
    { 
      failureRedirect:'/fail' 
    }), 
    function(req,res,next){ 
     console.log('Login was called'); 
     res.redirect('/',next); 
    } 
) 

server.post('/api/auth', passport.authenticate('azuread-openidconnect')); 

和連接到蔚藍的廣告B2C:

passport.use(new OIDCStrategy({ 
    redirectUrl:'http://localhost:3978/api/auth', 
    allowHttpForRedirectUrl:true, 
    clientID:'5fe844d7-e4d1-4c4c-ba70-078297b00abc', 
    clientSecret:'?aTvTEbwcNfUF2,^', 
    identityMetadata: 'https://login.microsoftonline.com/nuffieldbot.onmicrosoft.com/v2.0/.well-known/openid-configuration', 
    skipUserProfile: true, 
    responseType: 'code', 
    responseMode: 'form_post', 
    isB2C:true, 
    scope:['email','profile','offline_access','https://outlook.office.com/mail/read'], 
    loggingLevel:'info', 
    tenantName:'nuffieldbot.onmicrosoft.com', 
    passReqToCallback:true 
},function(req, iss, sub, profile, accessToken, refreshToken, done){ 
    log.info('Example:Email address we received was:', profile.email); 
    process.nextTick(function(){ 
     findByEmail(profile.email,function(err,user){ 
      if (err) { 
       return done(err); 
      } 
      if (!user){ 
       users.push(profile); 
       return done(null, profile); 
      } 
      return done(null, user); 
     }) 
    }) 
    } 

)); 

我在哪裏可以宣佈在我的代碼這一政策?

回答

1

對於B2C,我們必須有策略,如果您沒有在請求的查詢字符串中設置策略名稱,它會拋出錯誤:In collectInfoFromReq: policy is missing。請參考oidcstrategy.js的source code

// for B2C, we must have policy 
    if (self._options.isB2C && !params.policy) 
    return next(new Error('In collectInfoFromReq: policy is missing')); 

您必須要求制定政策:您的回覆Azure Active Directory OIDC Web Sample

+0

感謝:

<a href="/login/?p=B2C_1_sign">Sign In</a> 

您也可以參考的代碼示例。其實我以前讀過這個樣本。在我的機器人對話框中,我有一個鏈接到「/ login?p = B2C_1_signin」的按鈕。在此之前,我無法撥打登錄頁面。現在的情況是,我可以撥打登錄頁面並使用我創建的帳戶,但由於該錯誤,護照仍會返回未經授權的狀態。所以我想知道是否有其他地方可以申報政策。 –

+0

@ ZhenningLou,在查詢字符串中添加策略後得到同樣的錯誤? –

+0

是的,我創建了一個const鏈接='http:// localhost:3978/login?p = B2C_1_signin',我仍然有錯誤。 –