Authentication .NET Core 2以编程方式对KeyClope示例进行身份验证

Authentication .NET Core 2以编程方式对KeyClope示例进行身份验证,authentication,asp.net-core-2.0,keycloak,Authentication,Asp.net Core 2.0,Keycloak,我正试图通过使用.NETCore的设备(条形码阅读器)进行身份验证。我是.NET核心的新手 现在,我需要编写一些程序,使我能够在给定用户名/密码的情况下,使用openidconnect在KeyClope服务器上进行身份验证。是否有一些示例显示如何从用户名/密码字符串以编程方式进行身份验证 我发现了许多使用.NETCore作为服务器的示例,这些服务器的控制器为需要进行身份验证的用户公开RESTAPI。但是我需要一些示例/提示来说明.NET内核在哪里发出请求 更新 我可以(用curl)算出我到底要做

我正试图通过使用.NETCore的设备(条形码阅读器)进行身份验证。我是.NET核心的新手

现在,我需要编写一些程序,使我能够在给定用户名/密码的情况下,使用openidconnect在KeyClope服务器上进行身份验证。是否有一些示例显示如何从用户名/密码字符串以编程方式进行身份验证

我发现了许多使用.NETCore作为服务器的示例,这些服务器的控制器为需要进行身份验证的用户公开RESTAPI。但是我需要一些示例/提示来说明.NET内核在哪里发出请求

更新

我可以(用curl)算出我到底要做什么。对KeyClope服务器的两次调用

  • 电话:
  • 这将返回一个包含访问令牌的对象

  • 调用在标头中添加的安全服务
  • “授权:承载+访问令牌”


    我尝试用.NET内核开发这两个调用。

    我找到了解决方法。但我相信这不是最好的办法。我认为安全性有很大提高:

            var client = new HttpClient();
    
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json"));
            client.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter");
    
            var values = new Dictionary<string, string>
            {
                { "client_id", "myClientId" },
                { "grant_type", "password" },
                { "username", "usernaName" },
                { "password", "password" }
            };
            var content = new FormUrlEncodedContent(values);
             var response = await client.PostAsync("http://domain/auth/realms/realmName/protocol/openid-connect/token", content);
             var responseString = await response.Content.ReadAsStringAsync();
             var responseToken = JsonConvert.DeserializeObject<ResponseToken>(responseString);
    
            Console.WriteLine("accessToken: " + responseToken.AccessToken);
    
            var client2 = new HttpClient();
            client2.DefaultRequestHeaders.Accept.Clear();
            client2.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json"));
            client2.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter");
            client2.DefaultRequestHeaders.Add("Authorization", "bearer "+ responseToken.AccessToken);
    
            var dataResponse = client2.GetStreamAsync("http://serviceDomain/api/SampleData/WeatherForecasts");
    
            var serializer = new DataContractJsonSerializer(typeof(List<Weather>));
            var tempData = serializer.ReadObject(await dataResponse) as List<Weather>;
            Console.WriteLine(tempData);
    
    var-client=new-HttpClient();
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(
    新的MediaTypeWithQualityHeaderValue(“application/vnd.github.v3+json”);
    客户端。Debug TraseCuthAdlient。添加(“用户代理”,“.NET基础库报告员”);
    var值=新字典
    {
    {“客户端id”,“myClientId”},
    {“授权类型”,“密码”},
    {“用户名”,“用户名”},
    {“密码”,“密码”}
    };
    var内容=新的FormUrlEncodedContent(值);
    var response=wait client.PostAsync(“http://domain/auth/realms/realmName/protocol/openid-connect/token“,内容);
    var responseString=await response.Content.ReadAsStringAsync();
    var responseToken=JsonConvert.DeserializeObject(responseString);
    Console.WriteLine(“accessToken:+responseToken.accessToken”);
    var client2=新的HttpClient();
    client2.DefaultRequestHeaders.Accept.Clear();
    client2.DefaultRequestHeaders.Accept.Add(
    新的MediaTypeWithQualityHeaderValue(“application/vnd.github.v3+json”);
    客户端(Debug),添加(“用户代理”,“.NET基础库报告员”);
    client2.DefaultRequestHeaders.Add(“授权”、“承载人”+响应肯.AccessToken);
    var dataResponse=client2.GetStreamAsync(“http://serviceDomain/api/SampleData/WeatherForecasts");
    var serializer=newdatacontractjsonserializer(typeof(List));
    var tempData=serializer.ReadObject(等待dataResponse)作为列表;
    控制台写入线(tempData);
    
    如果您有更好的解决方案,请毫不犹豫地发布它