联合身份模式 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 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~