示例#1
0
 /// <summary>
 /// 生成oauth uri
 /// </summary>
 /// <param name="redirectUri">重定向uri</param>
 /// <returns></returns>
 public string OAuthUri(string redirectUri)
 {
     PrismParams p = new PrismParams();
     p.Add("client_id", this._client.Key);
     p.Add("redirect_uri", redirectUri);
     return this._client.Server + "/oauth/authorize?" + p.ToString();
 }
示例#2
0
        //添加签名
        public void FixParams(string method, string path, PrismParams parameters
            , PrismParams headers, PrismParams getParams, PrismParams postParams)
        {
            parameters.Add("client_id", this.Key);

            //http 方法 https方法直接传递 client_secret
            if (true)
            {
                parameters.Add("sign_time", Convert.ToString(this.timestamp()));
                parameters.Add("sign", this.Sign(path, headers, getParams, postParams, method));
            }
        }
示例#3
0
        /// <summary>
        /// RequireOAuth 获取认证凭据
        /// e.g.
        /// {
        ///     "access_token": "xxx",
        ///     "data": {
        ///     "@id": "000000",
        ///     "login": "******",
        ///     "email": "*****@*****.**",
        ///     "firstname": "xxx",
        ///     "lastname": "xxx"
        ///     },
        ///     "expires_in": xxx,
        ///     "refresh_expires": xxx,
        ///     "refresh_token": "xxx",
        ///     "session_id": "xxx"
        /// }
        /// </summary>
        /// <param name="code">字符串 token提取码 跳转验证登录后返回</param>
        /// <returns></returns>
        public string RequireOAuth(string code)
        {
            PrismParams parameters = new PrismParams { };
            parameters.Add("code", code);
            parameters.Add("grant_type", "authorization_code");

            PrismResponse response = this._client.Post("oauth/token", parameters);
            JObject ja = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(response.ToString());
            if (ja["access_token"] != null)
            {
                this._client.OAuthToken = ja["access_token"].ToString();
            }
            return this._client.OAuthToken;
        }
示例#4
0
        public void TestOAuth()
        {
            /*
             * 测试
             */
            string host = "http://192.168.51.50:8080";
            string key = "pufy2a7d";
            string secret = "skqovukpk2nmdrljphgj";

            PrismDotNet prism = new PrismDotNet(host, key, secret);
            prism.Notify().GetDelivery += OnGetDelivery;

            PrismParams p = new PrismParams();
            p["e"] = "va";
            p["c"] = "va";
            p["b"] = "vb";
            p["0"] = "v0";

            PrismResponse rsp = prism.Client().Get("platform/notify/status", p);
            Console.WriteLine(rsp.RequestId);
            Console.WriteLine(rsp);

            Debug.WriteLine(prism.OAuth().OAuthUri("http://www.baidu.com"));
        }
示例#5
0
        private PrismResponse action(string method, string api, PrismParams parameters)
        {
            try
            {
                PrismParams headers = new PrismParams { };
                PrismParams getParams = new PrismParams { };
                PrismParams postParams = new PrismParams { };
                string uristr = this.Server + "/" + api;
                Uri uri = new Uri(uristr);

                bool use_query_in_uri = false;

                switch (method)
                {
                    case "GET":
                        getParams = parameters;
                        use_query_in_uri = true;
                        break;
                    default:
                        postParams = parameters;
                        break;
                }

                this.FixParams(method, uri.AbsolutePath, parameters, headers, getParams, postParams);

                if (use_query_in_uri)
                {
                    uristr = uristr + "?" + getParams.ToString();
                }
                HttpWebRequest request = this.CreateRequest(uristr);

                request.Method = method;

                if (use_query_in_uri == false)
                {
                    byte[] postData = postParams.ToBytes();
                    request.ContentLength = postData.Length;
                    request.ContentType = "application/x-www-form-urlencoded";

                    using (var dataStream = request.GetRequestStream())
                    {
                        dataStream.Write(postData, 0, postData.Length);
                        dataStream.Close();
                    }
                }

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                return new PrismResponse(response);
            }
            catch (WebException e)
            {
                try
                {
                    HttpWebResponse response = (HttpWebResponse)e.Response;
                    throw new PrismException(e, response);
                }
                catch (PrismException)
                {
                    throw e;
                }
                catch
                {
                    throw e;
                }
            }
            catch
            {
                throw;
            }
        }
示例#6
0
 //处理post请求
 public PrismResponse Post(string api, PrismParams parameters)
 {
     return this.action("POST", api, parameters);
 }
示例#7
0
 //处理get请求
 public PrismResponse Get(string api, PrismParams parameters )
 {
     return this.action("GET", api, parameters);
 }
示例#8
0
        /// <summary>
        /// 签名算法
        /// </summary>
        /// <param name="url"> /path/to/method</param>
        /// <param name="header"> urnencode(HeaderKey1 + HeaderValue1 + HeaderKey2 + HeaderValue2 ...)</param>
        /// <param name="getParams"> urnencode(GetKey1 + GetValue1 + GetKey2 + GetValue2 ...)</param>
        /// <param name="postParams"> urnencode(PostKey1 + PostValue1 + PostKey2 + PostValue2 ...)</param>
        /// <param name="method"> GET | POST | DELETE | PUT</param>
        /// <returns></returns>
        private String Sign(string url, PrismParams header, PrismParams getParams,
            PrismParams postParams, String method)
        {
            string uri_path = url;
            List<string> items = new List<string>();
            items.Add(this._secret);
            items.Add(method);
            items.Add(PrismParams.Encode(uri_path));
            items.Add(PrismParams.Encode(header.sort_join("sign")));
            items.Add(PrismParams.Encode(getParams.sort_join("sign")));
            items.Add(PrismParams.Encode(postParams.sort_join("sign")));
            items.Add(this._secret);
            string signstr = String.Join("&", items.ToArray());

            MD5 md5Hash = MD5.Create();
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(signstr));
            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("X2"));
            }
            return sBuilder.ToString();
        }