认证和授权有什么区别?

Authentication (认证): 你是谁?Authorization (授权): 你能干什么?比如你去酒店开房,你需要拿身份证办理Check in,这是一个认证过程,身份证和密码的功效是一样的证明了你是谁,前台给你的房卡表示授权你开302房间,你不能用身份证去开别人房间吧,这就是认证和授权的区别。整个授权过程有2个重要的概念:rolescope (permission) 两...
摘要由CSDN通过智能技术生成
  • Authentication (认证): 你是谁?
  • Authorization (授权): 你能干什么?

比如你去酒店开房,你需要拿身份证办理Check in,这是一个认证过程,身份证和密码的功效是一样的证明了你是谁,前台给你的房卡表示授权你开302房间,你不能用身份证去开别人房间吧,这就是认证和授权的区别。

整个授权过程有2个重要的概念:

  • role
  • scope (permission) 两个词汇同一概念,我们暂时用scope来表示

从零开始

我们写了两个api, 分别都需要认证,

let users = [
  {
    id: 1, name: 'foo' },
  {
    id: 2, name: 'bar' }
];

/**
 * List all users
 * auth: required
 */
router.get('/users', auth(), async ctx => {
   
  ctx.body = users;
});

/**
 * Update user
 * auth: required
 */
router.patch('/users/:id', auth(), async ctx => {
   
  let target = null;
  try {
   
    target = _.find(users, x => x.id === Number.parseInt(ctx.params.id));
    target.name = target.name.toUpperCase();
    ctx.body = target;
  } catch (error) {
   
    ctx.throw(404, error);
  }
});

这里mock了一个auth的middleware,完成用户foo的认证,

let auth = () => {
   
  return async (ctx, next) => {
   
    ctx.user = {
    name: 'foo' };
    await next();
  }
};

这个时候我们来了一个需求,普通用户可以查看所有用户,但只有管理员可以修改用户,给user加上role [user | admin], 然后在api中判断一下就搞定了,


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值