Subject :表示一个用户(可以是人或程序),一个Subject可以拥有多个Principals
Principals :既可以代表一个用户的各种“身份证件(即identity)”,也可以代表一个用户的各种“身份角色(即role)”。总的来说,Principal这个概念比较灵活,可以根据应用需要做多种方式使用。引入Principal这个概念是为了对用户可能具有的多个角色(role)的进行责任和权限划分;或者是对类似于单点登入中的同一个人的多个身份证件(identity)进行聚合,以便统一认证和管理。
Credentials:用于证明Subject身份的东西就是Credential,包括public credential和private credential这两类。如用户名是public credential,口令则是private credential。注意credential与principal是不同的概念,principals是在登入系统后才会与Subject联系起来的东西,而credential是在登入系统前,与subject对应起来,用于证明subject身份的东西。比如我们用”用户名abcdef,密码123456“这两个Credentials登入系统,找到了对应的Subject,而Subject又有”User Adim / Sys Adim / Boss“(或者”abcdef1 / abcdef2 / abcdef3“)这3个Principles。综上可知,Subject和Principle这两个概念是”系统内部“用于描述用户及其身份或角色的,他是由系统内部使用的;而Credential这个概念主要是由用户(人)来管理和使用,或者说是由系统外部来使用的,用于在登入系统时证明登入者身份的合法性,并在登入系统后根据public credential找到系统内部对应的Subject。