• 钉钉单点登录方案



    企业内部应用实现。

    钉钉单点登录

    获取企业内部应用的access_token

    在获取access_token前,需要在开发者后台查看应用的AppKey和AppSecret:

    1. 登录钉钉开发者后台
    2. 应用开发页面,单击目标应用进入应用详情页面。
    3. 基础信息页面,复制应用的AppKey和AppSecret。

    参数:

    基本信息

    请求方式:GET

    请求地址https://oapi.dingtalk.com/gettoken

    请求参数

    名称 类型 是否必填 示例值 描述
    appkey String dingeqqpkv3xxxx 应用的唯一标识key。
    appsecret String GT-lsu-taDAsTsxxxx 应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。

    返回参数

    名称 类型 示例值 描述
    access_token String fw8ef8we8f76e6f7s8dxxxx 生成的access_token。
    expires_in Number 7200 access_token的过期时间,单位秒。
    errmsg String ok 返回码描述。
    errcode Number 0 返回码。

    根据sns临时授权码获取用户信息

    基本信息

    请求方式:POST

    请求地址https://oapi.dingtalk.com/sns/getuserinfo_bycode

    Query参数

    名称 类型 是否必填 示例值 描述
    accessKey String 3a2ca6aa3231b7xxxx 应用的AppKey
    timestamp String 1546084445901 当前时间戳,单位毫秒。
    signature String ddsdssfsdfxxxx 通过appSecret计算出来的签名值,签名算法为HmacSHA256,签名数据是当前时间戳timestamp,密钥是appId对应的appSecret,使用密钥对timestamp计算签名值。

    Body参数

    名称 类型 是否必填 示例值 描述
    tmp_auth_code String 4a2c5695b78738d495f47bxxxxxx 用户授权的临时授权码

    返回参数

    名称 类型 示例值 描述
    user_info UserInfo 用户信息。
    errmsg String ok 返回描述。
    errcode Number 0 返回码。

    用户信息

    "user_info":{
                    "nick":"名字",
                    "unionid":"dingdkjjojoixxxx",
                    "openid":"dingsdsqwlklklxxxx",
                    "main_org_auth_high_level":true
    }
    

    根据unionid获取用户userid

    基本信息

    请求方式:POST

    请求地址https://oapi.dingtalk.com/topapi/user/getbyunionid

    Query参数

    名称 类型 是否必填 示例值 描述
    access_token String be3Fxxxx 调用服务端API的应用凭证

    Body参数

    名称 类型 是否必填 示例值 描述
    unionid String z21HjQliSzpw0Yxxxx 员工在当前开发者企业账号范围内的唯一标识,系统生成,不会改变。

    返回参数

    名称 类型 示例值 描述
    request_id String zcqi5450rpit 请求ID。
    errcode Number 0 返回码。
    errmsg String ok 返回码描述。
    result UserGetByUnionIdResponse 返回结果。

    结果结构

    "result":{
       "contact_type":"0",
       "userid":"zhangsan"
    }
    

    根据userid获取用户详情

    基本信息

    请求方式:POST

    请求地址https://oapi.dingtalk.com/topapi/v2/user/get

    Query参数

    名称 类型 是否必填 示例值 描述
    access_token String be3Fxxxx 调用服务端API的应用凭证

    Body参数

    名称 类型 是否必填 示例值 描述
    userid String manager4220 用户的userid。
    language String zh_CN 通讯录语言。zh_CN:中文(默认值)en_US:英文

    返回参数

    名称 类型 示例值 描述
    request_id String 4e7exhl6pm0t 请求ID。
    errcode Number 0 返回码。
    errmsg String ok 返回码描述。
    result UserGetResponse 返回结果。

    结果结构

     "result": {
            "extension": "{\"爱好\":\"旅游\",\"年龄\":\"24\"}",
            "unionid": "xBnhjgjmofhhsLxxx",
            "boss": false,
            "unionEmpExt": {
                "corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx",
                "userid": "45694432-1019596262",
                "unionEmpMapList": [
                    {
                        "corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx",
                        "userid": "45694432-1019596262"
                    }
                ]
            },
            "role_list": [
                {
                    "group_name": "默认",
                    "id": 1507113578,
                    "name": "主管理员"
                }
            ],
            "admin": true,
            "remark": "杨XX",
            "title": "服务经理",
            "hired_date": 1598457600000,
            "userid": "manager4220",
            "work_place": "杭州",
            "dept_order_list": [
                {
                    "dept_id": 1,
                    "order": 176318669012199520
                },
                {
                    "dept_id": 379661095,
                    "order": 176318556766960500
                }
            ],
            "real_authed": true,
            "dept_id_list": [
                1,
                379661095
            ],
            "job_number": "10001",
            "email": "1@example.com",
            "leader_in_dept": [
                {
                    "dept_id": 379661095,
                    "leader": false
                },
                {
                    "dept_id": 1,
                    "leader": false
                }
            ],
            "manager_userid": "user01",
            "mobile": "188xxxx1234",
            "active": true,
            "telephone": "010-8xxxx6-2345",
            "avatar": "",
            "hide_mobile": false,
            "senior": false,
            "name": "杨xxx",
            "state_code": "86"
    }
    

    注意:单点的依据是unionid的,只需要获取到unionid即可,同理依据为userid的只需要获取到userid。

    开发者后台设置

    插件应用授权

    应用开发 ---> 工作台 ---> 登录 ---> 创建扫码登录应用授权

    完成之后,可以在列表看到相应的appid与appsecret。

    创建钉钉应用

    应用开发 ---> 创建应用(创建之后) ---> 点击应用 ---> 开发管理

    服务器出口,填写需要调用钉钉接口的服务器ip,首页地址填写https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${授权应用appid}&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=${服务sso url}

    填写保存之后,在版本管理与发布页面,选择发布范围,保存即可。

  • 相关阅读:
    Unity 深入解析合批(Batching)原理及失败原因
    ILRuntime作者林若峰分享:优化 Dots URP 性能优化 (干货满满)
    unity Mesh绘制网格线
    Shder基础知识
    UnityEditor工具链开发的常用小技巧与示例
    磁盘文件分析清理工具
    波函数坍塌算法(Wave Collapse Function)实现随机地图
    视觉小说 文字游戏引擎 ink 可配合Unity
    c# 字典键值排序
    unity文件夹复制
  • 原文地址:https://www.cnblogs.com/52why/p/16248901.html
Copyright © 2020-2023  润新知