跳到主要内容

自定义认证插件配置

ohpm-repo从2.3.0版本开始支持自定义认证插件(需配套使用1.8.0及以上版本ohpm命令行工具),允许您使用AccessToken认证,开发定制化的认证插件来对接开发者自己的用户信息系统。

当您使用自定义认证插件对接自己的用户系统时,如果存在网络通信,建议使用https协议,确保信息安全传输。

准备工作

  1. 下载ohpm-repo私仓工具安装包并解压。
  2. 进入ohpm-repo解压根目录,把模板文件中tsconfig.json 文件移动到ohpm-repo解压根目录。
  3. 建议将模板文件中CustomAuth.ts文件存入ohpm-repo解压根目录的plugins文件夹内。

编辑CustomAuth.ts文件,实现认证插件接口AuthPlugin

打开CustomAuth.ts模板文件,需要编写代码实现接口类AuthPlugin,实现auth和getUserInfo两个基础方法,实现类CustomAuth的名字可自定义修改。

接口类AuthPlugin中包含如下三个方法,需要在实现类中完成功能的实现。

// 插件文件的接口类定义如下
export interface AuthPlugin {
/**
* 用户信息获取:根据读写accessToken的值,返回用户的数据:用户的id,用户的名字,用户所属的组织,用户所创建的组织
* @param accessToken 用户的读写accessToken
* @returns
* id:用户的id,保证唯一性
* name:用户的名字,保证唯一性
* belongGroupList:用户所在的组织,具有发指定组织包的权限
* groupAdminList: 用户所管理的组织,具有删除组织内包的权限
*/
auth(accessToken: string): Promise<{
id: string;
name: string;
belongGroupList: Array<string>;
groupAdminList: Array<string>;
}>;

/**
* 用户信息获取:根据只读accessToken的值,返回用户的数据:用户的id,用户的名字,用户所属的组织,用户所创建的组织
* @param accessToken 用户的只读accessToken
* @returns
* id:用户的id,保证唯一性
* name:用户的名字,保证唯一性
* belongGroupList:用户所在的组织,具有发指定组织包的权限
* groupAdminList: 用户所管理的组织,具有删除组织内包的权限
*/
authWithReadOnly(accessToken: string): Promise<{
id: string;
name: string;
belongGroupList: Array<string>;
groupAdminList: Array<string>;
}>;

/**
* 根据用户id,返回用户的名字
* @param id 用户的id值
*/
getUserInfo(id: string): Promise<string>;
}
  1. auth

    通过读写AccessToken获取对应用户信息,函数的入参为读写AccessToken值,返回值有四个参数:用户的id值,用户的name值,用户所属的组织列表belongGroupList,用户所管理的组织列表groupAdminList。

  2. authWithReadOnly(5.0.5版本新增)

    通过只读AccessToken获取对应用户信息,函数的入参为只读AccessToken值,返回值有四个参数:用户的id值,用户的name值,用户所属的组织列表belongGroupList,用户所管理的组织列表groupAdminList。当ohpm-repo配置不支持匿名访问时,ohpm可以通过配置只读AccessToken值,获取执行install,info和update命令的权限。

  3. getUserInfo

    实现根据用户id获取用户名字的功能。函数入参为用户的id值;返回值为用户的名字。

  1. AccessToken分两种权限等级:只读AccessToken允许ohpm命令行执行info,install和update操作,只需要ohpm-repo读权限;读写AccessToken除了包含只读权限外,还支持执行publish,unpublish和dist-tags相关操作,需要ohpm-repo读写权限。
  2. 如果ohpm-repo支持匿名访问,ohpm执行info,install和update等读操作命令,不需要配置AccessToken值;当ohpm-repo配置不支持匿名访问时,必须配置只读/读写AccessToken,才能获得执行info,install和update命令权限。
  3. 在实现上述三个函数时,插件文件CustomAuth.ts需要引用AuthPlugin接口类,故需要根据当前插件文件CustomAuth.ts所在位置,正确地编写AuthPlugin接口类的引用地址,被引用接口类所在文件的地址如下:
    • AuthPlugin接口类所在文件的位置:ohpm-repo解压根目录/libs/plugins/auth/AuthPlugin
  4. 如果插件文件CustomAuth.ts存储在默认位置(ohpm-repo解压根目录中plugins文件夹内),插件文件CustomAuth.ts中默认AuthPlugin接口类引用地址如下:
    • import {AuthPlugin} from '../libs/plugins/auth/AuthPlugin';

插件文件的使用和ohpm-repo的启动

  1. 安装必要的npm包。安装typescript和@types/node包,编译ts文件为js文件。

    $ npm i typescript
    $ npm i @types/node
  2. 编译插件文件。

    • 如果CustomAuth.ts存放在ohpm-repo解压根目录的plugins文件夹中,在ohpm-repo解压根目录下执行编译命令。

      $ tsc
    • 命令成功执行后会在ohpm-repo解压根目录的plugins/outDir文件夹中生成编译后的文件CustomAuth.js。

      如果CustomAuth.ts没有存放在ohpm-repo解压根目录的plugins内,请先修改tsconfig.json 文件中include和outDir参数,前者指定待编译插件代码的存储目录,后者指定编译完成后文件的输出位置,然后再在ohpm-repo解压根目录执行编译命令tsc。

      // tsconfig.json 文件中的默认配置
      // 默认值:插件存放在 ./plugins 中,编译后的文件存放在./plugins/outDir中
      "include": "plugins/*" // 插件文件的位置
      "outDir": "./plugins/outDir" // 编译后文件的存放位置
  3. 编译后文件存放指定位置。

    编译后获得的CustomAuth.js需要与CustomAuth.ts 保持在同一级目录中,否则会编译出错,默认输出在./plugins/outDir内,需要把CustomAuth.js拷贝到CustomAuth.ts同级目录./plugins中(ohpm-repo成功启动后可删除CustomAuth.ts文件)。

  4. 编辑配置文件。为了保证ohpm-repo能够正确加载自定义认证插件,需要修改配置文件config.yaml中auth_plugin配置项(配置文件默认没有配置auth_plugin参数)。

    // 配置文件中 auth_plugin 项的格式参考
    auth_plugin:
    name: CustomAuth
    path: plugins/CustomAuth.js

    参数说明:

    • name: 插件名称,自定义插件文件CustomAuth.js中定义的实现类名称,如果实现类为CustomAuth,故此处name值为:CustomAuth 。
    • path: 编译后插件文件CustomAuth.js的存储位置。支持绝对路径和相对路径,相对路径的基准为ohpm-repo解压根目录。
  5. ohpm-repo服务部署。在完成上述操作之后,按照ohpm-repo部署指导,完成服务部署。

  6. 使用自定义认证插件进行包的发布和下架等操作。

    当ohpm-repo成功启动后,在ohpm客户端的配置文件.ohpmrc中新增一行(//是有效字符,不是注释,勿删)。

    • 通过authWithReadOnly认证:配置只读AccessToken,ohpm能够执行info,install和update命令,这三个命令需要读取ohpm-repo数据权限。

      //<ip>:<port>/repos/ohpm/:_read_auth=<readOnlyToken>
    • 通过auth认证:配置读写AccessToken,ohpm除了能够执行需要ohpm-repo读权限的info,install和update命令,还能够执行publish,unpublish和dist-tags等需要读写权限命令。

      //<ip>:<port>/repos/ohpm/:_auth=<readWriteToken>

    其中ip和port为ohpm-repo私仓启动机器所在的ip值和端口值;readOnlyToken/readWriteToken为用户信息系统内有效的只读/读写accessToken值,通过该accessToken值,用户调用自定义认证插件CustomAuth中auth和authWithReadOnly方法,能够获取到有效的用户信息。