0

私は遊んでいたので、Integrating Azure AD into an AngularJS single page app このチュートリアルを実行してください。 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-devquickstarts-angular-nodePassport-Azure-Adのベア戦略でSPAを認証できません

これは、AzureのAD v2.0のエンドポイントのために実装されているが、残念ながら私の組織では、AzureのAD v2.0のエンドポイントをサポートしていないので、私はGA adal.jsadal.jsadal-angularライブラリとadal-angularライブラリの実験的なバージョンを置き換えます。フロントエンド認証は完全に機能します。しかし、私はpassport-azure-adに基づいてバックエンドの設定を変更した後。バックエンドは、暗黙的に付与されたトークンの認証に失敗しました。

マニフェストファイルでallow implicit flowをtrueに設定しました。また、client IDTenant Nameを、同じangularフロントエンドを使用し、.NETをバックエンドとして使用する別の例で使用しようとしました。出来た!ここで

は私のバックエンドの設定は、私のサーバー

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' 
}; 

です:フロントエンドが認証された後、ここで

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) 

は私のブラウザのコンソールから出力されます:

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

誰も似たようなことをしていますか?

+1

app.js? login.microsoftonline.com/common/.well-known/openid-configuration – Saca

+0

はい!実際問題は、設定の "オーディエンス"プロパティがクライアントIDと同じでなければならないということです – Rui

+1

@Ruiは答えとして投稿し、問題が解決したらそれを受け入れます! –

答えて

1

この質問の著者が上記のコメントで述べたように、configのオーディエンス値はクライアントIDでなければなりません。誰もが悩みをお持ちの場合は

関連する問題