联合身份模式 Federated Identity Pattern

未匹配的标注

描述

把身份验证委托给外部的用户认证系统。

背景和问题

用户在有商业关系的不同应用程序中认证,可能需要使用不同的凭证。

解决方案

联合身份的认证机制,简单一点,就是用户中心。

liaoliaophp 联合身份模式

注意事项

  1. 身份验证的单点故障。将应用程序部署到多个数据中心,以保持应用程序的可靠性和可用性。
  2. 身份验证机制。基于角色的访问控制(RBAC),需要允许更精细的资源控制。

何时使用

  1. 单点登陆。
  2. 全平台的统一身份认证机制。
  3. 多个应用之间的身份认证。

结构中包含的角色

  1. Consumer 消费者
  2. TokenProvider 令牌提供者
  3. Service 服务

最小可表达代码

// 令牌提供者
class TokenProvider
{
    protected $users = [
        ['id' => 1, 'phone' => 12121212121, 'name' => '吖三', 'token' => 'aaa'],
        ['id' => 2, 'phone' => 12323232323, 'name' => '吖四', 'token' => 'bbb'],
    ];

    public function getTokenByPhone($phone)
    {
        foreach ($this->users as $user) {
            if ($phone == $user['phone']) {
                return $user['token'];
            }
        }

        return null;
    }

    public function getNameByToken($token)
    {
        foreach ($this->users as $user) {
            if ($token == $user['token']) {
                return $user['name'];
            }
        }

        return null;
    }
}

// 消费者
class Consumer
{
    public function getToken()
    {
        return $this->tokens[0];
    }

    public function accessResource()
    {
        $phone = 123232323231;
        $token = (new TokenProvider)->getTokenByPhone($phone);
        (new Service)->debug($token);
    }
}

// 服务
class Service
{
    public function debug($token)
    {
        $name = (new TokenProvider)->getNameByToken($token);
        if ($name) {
            var_dump("我是{$name}");
        } else {
            var_dump("找不到用户!");
        }
    }
}

(new Consumer)->accessResource();

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~