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?
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
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
@Rui post que la réponse et l'accepter si cela a résolu votre problème! –