यहाँ मेरी प्रमाणीकरण रणनीति का विन्यास है:

var JWT_STRATEGY_CONFIG = {
  jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('MyBearer'),
  secretOrKey: SECRET,
  issuer : ISSUER,
  audience: AUDIENCE,
  passReqToCallback: false
};

मैं एक दूसरा एक्सट्रैक्टर जोड़ना चाहता हूं, अगर पहला विफल हो जाता है, तो मैं दूसरे को आजमाने की कोशिश करता हूं। अपने विचार को स्पष्ट करने के लिए, मैं यहाँ क्या करना चाहता हूँ:

var JWT_STRATEGY_CONFIG = {
  jwtFromRequest: [
    ExtractJwt.fromAuthHeaderWithScheme('MyBearer'),
    ExtractJwt.fromUrlQueryParameter('authorization')
  ],
  secretOrKey: SECRET,
  issuer : ISSUER,
  audience: AUDIENCE,
  passReqToCallback: false
};
3
Dev 26 अक्टूबर 2017, 00:31

3 जवाब

सबसे बढ़िया उत्तर

आप ExtractJwt.fromExtractors फ़ंक्शन में कई एक्सट्रैक्टर भी पास कर सकते हैं

     var JWT_STRATEGY_CONFIG = {   
      secretOrKey: SECRET,   
      issuer : ISSUER,    
      audience: AUDIENCE,    
      passReqToCallback: false,
     jwtFromRequest:ExtractJwt.fromExtractors([ExtractJwt.fromBodyField('auth_token'),ExtractJwt.fromUrlQueryParameter('auth_token')]),

};
12
Gaurav Rathee 17 अगस्त 2018, 10:30
महान! कोशिश नहीं की लेकिन मुझे आप पर भरोसा है। उत्तर देने के लिए धन्यवाद, भले ही पोस्ट थोड़ी पुरानी हो, नए समाधानों का हमेशा स्वागत है, खासकर जब वे मूल लक्ष्य के करीब हों। अंगूठे ऊपर आदमी!
 – 
Dev
17 अगस्त 2018, 17:46

मजाक था! मुझे बस एहसास हुआ कि मैं आसानी से मेरा अपना एक्सट्रैक्टर बना सकता हूं!

var cookieExtractor = function(req) {
    var token = null;
    if (req && req.cookies)
    {
        token = req.cookies['jwt'];
    }
    return token;
};

निर्धारित समस्या!

संपादित करें : यदि आपका मामला मेरे जैसा ही है, तो मेरे द्वारा बनाया गया कोड यहां दिया गया है:

var TokenExtractor = function(req){
  var token = null;

  if ((req.headers && req.headers.authorization) || (req.query && req.query.authorization)) {
    if (req.headers.authorization)
      var parts = req.headers.authorization.split(' ');
    else if (req.query.authorization)
      var parts = req.query.authorization.split(' ');

    if (parts.length == 2) {
      var scheme = parts[0],
        credentials = parts[1];

      if (/^MyBearer$/i.test(scheme)) { //<-- replace MyBearer by your own.
        token = credentials;
      }
    }
  } else if (req.param('token')) {
    token = req.param('token');
    delete req.query.token;
  }

  return token;
}

var JWT_STRATEGY_CONFIG = {
  jwtFromRequest: TokenExtractor,
  secretOrKey: SECRET,
  issuer : ISSUER,
  audience: AUDIENCE,
  passReqToCallback: false
};

यह कोड आंशिक रूप से उस कोड से प्रेरित है जिसे आप यहां पा सकते हैं।

3
Dev 22 अप्रैल 2018, 20:24

उस सरल समाधान को साझा करने के लिए धन्यवाद। मैंने टाइपस्क्रिप्ट में NestJs के लिए आपका दृष्टिकोण अपनाया। बस अगर कोई उसे ढूंढता है।

import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { Inject, Injectable } from '@nestjs/common';
import { JWT_SECRET } from '../auth.constants';

/**
 * Extracts the jwt from a cookie
 * @param req Http Request
 */
const cookieExtractor = (req) => {
  let token = null;
  if (req && req.cookies) {
    token = req.cookies.jwt;
  }
  return token;
};

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {

  constructor(@Inject('JWT_SECRET') jwtSecret: string) {
    super({
      jwtFromRequest: ExtractJwt.fromExtractors([
        // Take jwt from http header
        ExtractJwt.fromAuthHeaderAsBearerToken(),
        // Take jwt from cookie
        cookieExtractor
      ]),
      ignoreExpiration: false,
      secretOrKey: jwtSecret,
    });
  }

  async validate(payload: { sub: number, iat: number, exp: number, username: string }): Promise<{ userId: any; username: any }> {
    return { userId: payload.sub, username: payload.username };
  }
}
2
MaxB 2 जुलाई 2021, 22:11
योगदान के लिए एक टन धन्यवाद! जितने अधिक उत्तर, उतना अच्छा!
 – 
Dev
2 जुलाई 2021, 23:28