0

Donc, je jouais pour obtenir Integrating Azure AD into an AngularJS single page app ce tutoriel pour travailler. https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-devquickstarts-angular-nodeImpossible d'authentifier SPA avec la stratégie Bear de passport-azure-ad

Il est mis en œuvre pour le point final v2.0 Azure AD, mais malheureusement, mon organisation ne supporte pas le point final de v2.0 Azure AD, donc je remplace la version expérimentale de adal.js et adal-angular bibliothèques avec GA adal.js et adal-angular bibliothèques . L'authentification frontale fonctionne parfaitement. Cependant, après avoir modifié la configuration back-end basée sur passport-azure-ad. Le back-end n'a pas réussi à authentifier les jetons qui lui ont été accordés implicitement.

J'ai défini le allow implicit flow à true dans le fichier manifeste. J'ai également essayé d'utiliser mon client ID et Tenant Name dans un autre exemple qui utilise le même front end angular mais .NET comme back-end. Ça a marché!

Voici ma config back-end

exports.creds = { 

    // The app id you get from the registration portal 
    audience: 'http://localhost:8080', 
    clientID: '**********************************', 

    // Passport will use this URL to fetch the token validation information from Azure AD 
    identityMetadata: '************************************', 
    // Required. 
    // If you are using the common endpoint, you should either set `validateIssuer` to false, or provide a value for `issuer`. 
    validateIssuer: true, 

    // Required. 
    // Set to true if you use `function(req, token, done)` as the verify callback. 
    // Set to false if you use `function(req, token)` as the verify callback. 
    passReqToCallback: false, 

    // Required if you are using common endpoint and setting `validateIssuer` to true. 
    // For tenant-specific endpoint, this field is optional, we will use the issuer from the metadata by default. 
    issuer: '**************************************', 

    isB2C: false, 

    // Optional. Default value is false. 
    // Set to true if you accept access_token whose `aud` claim contains multiple values. 
    allowMultiAudiencesInToken: false, 

    // Optional. 'error', 'warn' or 'info' 
    loggingLevel: 'info' 
}; 

Mon serveur:

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

// Pull in the Azure AD bearer passport strategy 
var OIDCBearerStrategy = require('passport-azure-ad').BearerStrategy; 

// This object is used for in-memory data storage, instead of a database. 
// Each time you run the server, you will get a fresh, empty list. 
var tasks = []; 

// Load passport and configure it to use Azure AD Bearer auth 
app.use(passport.initialize()); 
passport.use(new OIDCBearerStrategy({ 
    identityMetadata: config.creds.identityMetadata, 
    audience: config.creds.audience, 
    clientID: config.creds.clientID, 
    validateIssuer: true, 
    issuer: config.creds.issuer, 

}, function (token, done) { 
    console.log("yooo"); 
    return done(null, token, null); 
})); 

var router = express.Router(); 
router.route('/api/tasks') 
    .post(passport.authenticate('oauth-bearer', { session: false }), controller) 

Voici la sortie de ma console de navigateur après le frontal authentifié:

State: ************** 
adal.js:973 State status:true 
adal.js:973 State is right 

Est-ce que quelqu'un a fait des choses semblables?

+1

Pouvez-vous confirmer que vous avez spécifié le point de terminaison v1 pour les métadonnées? login.microsoftonline.com/common/.well-known/openid-configuration – Saca

+0

Oui! En fait, le problème est que la propriété "audience" dans la config devrait être la même que l'ID du client – Rui

+1

@Rui post que la réponse et l'accepter si cela a résolu votre problème! –

Répondre

1

Comme mentionné dans le commentaire ci-dessus par l'auteur de cette question, la valeur d'audience dans la configuration doit être l'ID du client.