企业微信的身份验证(.NET)

我们在推送图文消息到企业微信应用的时候,通常在图文消息中会包含网页地址,往往需要用户输入账号密码进行登录,现在要做到不需要用户自己输入账号密码,后台自动验证用户身份登录

1.构造网页授权链接

需要构建一个这样结构的连接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
当用户在企业微信上点击这个链接时会先请求企业微信的api再跳转至redirect_uri并带上code,根据返回的code就可以获取用户身份了

参数必须说明
appid企业的CorpID
redirect_uri授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type返回类型,此时固定为:code
scope应用授权作用域。企业自建应用固定填写:snsapi_base
state重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
#wechat_redirect终端使用此参数判断是否需要带上身份信息
		[AllowAnonymous]
        public HttpResponseMessage Get()
        {

            //获取code
            var allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();
            string code = allUrlKeyValues.LastOrDefault(x => x.Key == "code").Value;
            HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.Moved);
            if (string.IsNullOrEmpty(code))
            {
                string redirect_uri = Request.RequestUri.AbsoluteUri;
                //构造回调连接
                resp.Headers.Location = new Uri($"https://open.weixin.qq.com/connect/oauth2/authorize?appid={corpid}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_base&state=#wechat_redirect");
                return resp;
            }

            //第一步,获取ACCESS_TOKEN
            string access_token = get_access_token();

            //第二步获取访问用户身份
            string UserId = get_userid(access_token, code);


            //Url.Request.RequestUri.
            resp.Headers.Location = new Uri($"url?UserId={UserId}");
            return resp;
        }

获取access_token的方法get_access_token() 在上一篇文章.NET推送图文消息到企业微信应用中提到过

这里默认GET方式请求所以没加HttpGet特性

该回调只能在企业微信上进行,即只能在企业微信上点击链接

重定向到构造的回调连接后会返回code,通过code来获取用户id

2.获取用户ID

private string get_userid(string access_token, string code)
        {
            //第二步获取访问用户身份
            string result = HttpHelper.GetUrlString(
                            httpUrl: $"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}",
                            isProxy: true);//开启代理

            LogHelper.Debug(result);
            var obj = JObject.Parse(result);
            //取出用户ID
            string UserId = obj["UserId"].ToString();

            return UserId;
        }

GetUrlString方法——获取请求地址内容,在之前的文章中提到过

获取用户ID之后可以另外进行处理,这里只是简单的将用户ID传到页面上,通常情况是不会这样做的

总结思路:连接地址直接到控制器,当用户点击企业微信应用上的连接时直接跳转到这个控制器,然后在控制器上构造网页授权链接进行回调,再通过code获取用户id

上一篇:.NET推送图文消息到企业微信应用

下一篇:使用.NET推送企业微信群聊消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迪士尼在逃码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值