联合身份模式 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 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~