Authentication .NET Core 2以编程方式对KeyClope示例进行身份验证
我正试图通过使用.NETCore的设备(条形码阅读器)进行身份验证。我是.NET核心的新手 现在,我需要编写一些程序,使我能够在给定用户名/密码的情况下,使用openidconnect在KeyClope服务器上进行身份验证。是否有一些示例显示如何从用户名/密码字符串以编程方式进行身份验证 我发现了许多使用.NETCore作为服务器的示例,这些服务器的控制器为需要进行身份验证的用户公开RESTAPI。但是我需要一些示例/提示来说明.NET内核在哪里发出请求 更新 我可以(用curl)算出我到底要做什么。对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)算出我到底要做
我尝试用.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);
如果您有更好的解决方案,请毫不犹豫地发布它