身份认证和授权

Added in 0.4.0

jmms的权限模型基于OAuth2的Scope进行实现,设计思路请参考这篇文章Permission scopes | Graph API concepts

身份认证

访问一个api的身份有两种类型:

  • user: 用户
  • client:客户端

一次请求包含的身份信息可以存在四种情况:

  1. 完全匿名(anonymous)
  2. 只有用户(user only)
  3. 只有客户端(client only)
  4. 用户、客户端两者都有(user & client)

授权定义

jmms把上面的四种身份访问情况和权限(scope)结合起来,组合成下面的三种授权定义:

  1. 匿名 :既没有用户身份也没有客户端身份
  2. 用户 + [scope] :用户身份(只要有) + 权限(可选)
  3. 客户端 + [scope] :客户端身份(有且仅有)+ 权限(可选)

其中匿名和其他两种方式是互斥的;而用户客户端可以同时定义,两者是关系。

Swagger定义

在jmms中,对应上面的身份认证和授权定义,在swagger中有相对应的表达方式。

安全定义

在开启了oauth2之后,swagger.json中将会出现两个安全定义:

{
    "securityDefinitions": {
        "user": {
            "type": "oauth2",
            "flow": "implicit",
            "authorizationUrl": "http://localhost:8088/oauth2/authorize",
            "scopes": {}
        },
        "client": {
            "type": "oauth2",
            "flow": "application",
            "tokenUrl": "http://localhost:8088/oauth2/token",
            "scopes": {}
        }
    }
}

其中user表示用户类型的安全,client表示客户端类型的安全;下面分别对三种授权定义进行举例说明。

匿名

匿名表示不需要任何身份认证,也不需要任何权限即可访问,swagger的定义如下:

{
    "paths": {
        "/hello": {
            "get": {
                ...
            }
        }
    }
}

在操作定义中不出现security

用户 + 权限

  • 用户只需要登录,不需要额外的权限:
{
    "paths": {
        "/hello": {
            "get": {
                "security": [
                    {
                        "user": []
                    }
               ]
            }
        }
    }
}
  • 用户需要登录,并且授予额外的权限:
{
    "paths": {
        "/hello": {
            "get": {
                "security": [
                    {
                        "user": ["read"]
                    }
               ]
            }
        }
    }
}

其中read为需要的权限

客户端 + 权限

  • 客户端只需要经过认证,不需要额外的权限:
{
    "paths": {
        "/hello": {
            "get": {
                "security": [
                    {
                        "client": []
                    }
               ]
            }
        }
    }
}
  • 客户端需要经过认证,并且授予额外的权限:
{
    "paths": {
        "/hello": {
            "get": {
                "security": [
                    {
                        "client": ["admin"]
                    }
               ]
            }
        }
    }
}

其中admin为需要的权限

Bingosoft            updated 2018-07-23
上一篇:内置OAuth2 Server 下一篇:操作权限控制

results matching ""

    No results matching ""