WebRequests in C# OpenID Connect OAuth

15 浏览
0 Comments

WebRequests in C# OpenID Connect OAuth

我需要一个使用OpenID Connect/OAuth身份验证/授权访问外部API的示例,支持的OAuth流程是使用PKCE的授权码流。

终点使用基于HTTPS的REST技术。

我知道我首先必须获取授权码,然后请求认证令牌。

在以下URL中,他们有OpenID Connect:https://iam.efatura.cv/auth/realms/taxpayers/.well-known/openid-configuration

我正在使用C#的WinForm。

我正在做这个,并且出现401错误。

尝试 {

            string url5 = "https://iam.efatura.cv/auth/realms/taxpayers/protocol/openid-connect/token";
            string client_id = "";
            string client_secret = "";           
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url5);
            webRequest.PreAuthenticate = false;
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Accept = "multipart/form-data";
            webRequest.Headers.Add("Authorization:" + Authorization(client_id, client_secret));
            var request = "grant_type=client_credentials";
            byte[] req_bytes = Encoding.ASCII.GetBytes(request);
            webRequest.ContentLength = req_bytes.Length;
            Stream strm = webRequest.GetRequestStream();
            strm.Write(req_bytes, 0, req_bytes.Length);
            strm.Close();
            MessageBox.Show(webRequest.Headers.ToString());
            HttpWebResponse resp = (HttpWebResponse)webRequest.GetResponse();
            String json = "";
            using (Stream respStr = resp.GetResponseStream())
            {
                using (StreamReader rdr = new StreamReader(respStr, Encoding.UTF8))
                {
                    //应该返回一个字符串,我可以将其转换为JSON并解析出访问令牌
                    json = rdr.ReadToEnd();
                    rdr.Close();
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

0