springboot如何防止通过header的token访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot如何防止通过header的token访问相关的知识,希望对你有一定的参考价值。

使用Springboot可以通过在应用的安全配置中添加代码来防止通过header的token访问:如将所有请求都需要在header中带上一个特殊的标记(如token),然后在安全配置中设置过滤器,只有header中的token和系统预定的token相同才能够通过访问验证。 参考技术A 回答:是 有的,是可以的!因为您所提到的问题 springboot如何防止通过header的token访问? 在相关知识中是有明确的答案导向的。 的具体问题的原因您可以通过搜索相关问题知识,地区具体情况,查阅资料。同时建议您在综合判断下您所遇到问题的具体时间和目前的知识储备,理性判断,综合分析。 参考技术B Springboot提供了多种防止通过header中的token访问的方法,比如使用HTTP基础认证、基于角色权限的认证以及基于JWT的认证等。

使用passport-http Basic + passport-local组合时如何防止www-authenticate header

【中文标题】使用passport-http Basic + passport-local组合时如何防止www-authenticate header【英文标题】:howto prevent www-authenticate header when using passport-http Basic + passport-local combination 【发布时间】:2015-10-29 12:15:04 【问题描述】:

您好,我想在我的应用程序中同时支持基于表单的身份验证和 http 基本身份验证。一切都按预期工作,除非我通过带有错误凭据的 angularjs 使用基于表单的身份验证。

浏览器没有让我的 Angular 代码处理 401,而是显示由 WWW-Authenticate 标头引起的 BASIC 身份验证对话框。

如何防止在使用本地策略时添加该标头? 或者我怎样才能以不同的方式支持这两种机制?

我在基于快递的应用程序中使用以下路线。

api.post('/authenticate', passport.authenticate(['local', 'basic'],  session: false ), function (req, res) 

这会在该 url 上启用两种身份验证方法。我再说一遍,当我使用基于表单的错误凭据时,它会向我显示基本的身份验证对话框(我不想要那个)。

以下是我注册策略的方式。

passport.use(new BasicStrategy( realm: 'Authentication failed. Wrong username or password.', verifyLocalUser));
passport.use(new LocalStrategy(verifyLocalUser));

这就是我的 verifyUser 方法的样子...

var verifyLocalUser = function (username, password, next) 
    User.findOne(
        username: username
    ).select('fullname admin username password').exec(function (err, user) 
        if (err) 
            return next(err);
        

        if (user && user.comparePasswords(password)) 
            return next(null, user);
         else 
            next(null, false,  message: 'Authentication failed. Wrong username or password.' );
        
    );

有人知道如何使用 passport.js 支持多种身份验证方法吗?

为了完整起见,这是验证我的角码...

authFactory.signIn = function (username, password) 
        return $http.post('/api/authenticate', 
            username: username,
            password: password
        ).then(function (res) 
            AuthToken.setToken(res.data.token);
            return res.data;
        , function (res) 
            console.warn(res);
        );
    ;

【问题讨论】:

【参考方案1】:

而不是这个:

next(null, false,  message: 'Authentication failed. Wrong username or password.' );

你可以用这个:

cb(new YourCustomError())

并且“YourCustomError”可以有一条消息,对我来说我的“YourCustomError”看起来像:

class HttpError extends Error 
  constructor (msg = 'Invalid Request', status = 400) 
    super(msg)
    this.status = status
  


class Forbidden extends HttpError 
  constructor (msg = 'Forbidden') 
    super(msg, 403)
  

或者new Error(<message>) 可能也适合你

【讨论】:

以上是关于springboot如何防止通过header的token访问的主要内容,如果未能解决你的问题,请参考以下文章

使用passport-http Basic + passport-local组合时如何防止www-authenticate header

如何抑制 ResponseHeader

Springboot之接口简单加密和验证

补习系列-springboot中的几种scope

如何防止 node-gyp 从 Internet 下载 node-headers.tar.gz 和 node.lib?

如何防止页脚占据太多高度? [复制]