Я не очень знаком с oAuth2 и уже застрял на получении токена в C #.
Я могу получить токен через Почтальона.
Вот мои настройки на почтальоне
Настройки почтальона
Для получения токена пользователю необходимо войти в систему со своими учетными данными, после чего токен будет получен.
Я пытаюсь добиться того же пути в c #.
Вот код, который я пробовал:
var serverDescription = new AuthorizationServerDescription();
serverDescription.AuthorizationEndpoint = new Uri("https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize?resource=https%3A%2F%2Fmicrosoft.onmicrosoft.com%2Fredirectionapi");
serverDescription.TokenEndpoint = new Uri("https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/token?resource=https%3A%2F%2Fmicrosoft.onmicrosoft.com%2Fredirectionapi");
serverDescription.ProtocolVersion = ProtocolVersion.V20;
var client = new WebServerClient(serverDescription);
client.ClientIdentifier = "MY CLIENT ID";
client.ClientCredentialApplicator =
ClientCredentialApplicator.PostParameter("MY CLIENT SECRET");
var token = client.GetClientAccessToken();
var request = (HttpWebRequest)WebRequest.Create("https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize");
request.Method = "GET";
client.AuthorizeRequest(request, token);
var response = request.GetResponse();
var postreqreader = new StreamReader(response.GetResponseStream());
var json = postreqreader.ReadToEnd();
Но когда я нажимаю кнопку, ничего не происходит.Токен не получен, даже страница с логином так и не появилась.
Этот код открывает браузер для входа, но не может получить токен, пока отсутствуют параметры, такие как секрет клиента, конечная точка токена, конечная точка авторизации
var authority = "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize";
var resource = "https://microsoft.onmicrosoft.com/FWDLinks"; //Redirection API Test Resource.
var replyUrl = "https://www.getpostman.com/oauth2/callback"; //Reply URL your application to identify itself.
var clientId = "CLIENT ID";
AuthenticationContext authContext = new AuthenticationContext(authority);
var token = authContext.AcquireTokenAsync(resource, clientId, new Uri(replyUrl), new PlatformParameters(PromptBehavior.Auto)).Result;
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("Authorization", token.CreateAuthorizationHeader());
ОБНОВЛЕНИЕ
Из первого примера кода я могу получить клиентский токен, но мне нужно обменять этот токен на токен доступа и не знаю, как.
Этот остальной код, кажется, не работает и незнаю почему /
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create("https://www.getpostman.com/oauth2/callback");
request.Method = "GET";
client.AuthorizeRequest(request, token);
var response = request.GetResponse();
var postreqreader = new StreamReader(response.GetResponseStream());
var json = postreqreader.ReadToEnd();
переменная json, возвращающая ноль, та же самая переменная ответа