🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] "认证",形象地理解就是"你是谁"。在上文中,用户A在发起API请求时,管理员如何道该请求是用户A发起的呢?所以,客户端在发起API请求时,必须要携带一个身份信息来表明"我是谁",Apiserver在收到请求后,需要对这个身份信息进行认证(“不是你说你是谁,你就是谁,而是我核实你是谁,你才是谁”) 在认证与授权中,有两个重要的概念:用户(USER)与用户组(GROUP)。客户端携带的身份凭证,最终会被apiserver认证为USER与GROUP。 接下来,我们介绍几种常见的认证方式。 ## **X509客户证书** 该认证方式下,客户端发起请求时需要携带一个证书,表明自已的身份。该证书必须是由apiserver的启动参数`--client-ca-file`指定的CA所签发(即能够被该参数指定的CA证书文件所验证)。如果apiserver验证客户端所携带的客户证书是client-ca-file签发的,那么认证通过。 在客户证书文件中,会包含域名`/CN`与组织`/O`字段,假设客户证书的CN为jbeta,组织为app1与app2,那么该请求会被认证为User jbeta与Group app1与app2。 根据上面的理论,客户端在访问apiserver时,需要一个ca.crt来验证apiserver的证书(建立https连接),还需要携带一个client.crt来表明自已的身份。不过在实际中,客户端还需要携带client.key,猜测应该是双向HTTPS的原因 ## **静态Token** apiserver可以通过启动参数--token-auth-file=/path/to/file来开启Token认证。该文件的每一行如下:第一个字段为token,第二个为用户名,第三个为用户id,后面为组名(可选,如果有多个组,则需要用双引号引起来) ``` token,user,uid,"group1,group2" ``` 当客户端使用该认证方式来发起请求的时候,需在Header参数中添加以下字段 ``` Authorization: Bearer <token> ``` ## **静态密码** apiserver可以通过启动参数--basic-auth-file=/path/to/file来开启密码认证,该文件的每一行如下:第一个字段为密码,第二个为用户名,第三个为用户id,后面为组名(可选,如果有多个组,则需要用双引号引起来) ``` password,user,uid,"group1,group2,group3" ``` 当客户端使用该认证方式来发起请求的时候,需在Header参数中添加以下字段 ``` Authorization: Basic <base64encoded(user:password)> ```