Auth0 AuthenticationAPI с использованием AuthenticationRequest
Я пытаюсь сделать "простое" консольное приложение, которое использует онлайн-API EVE, оно использует проверку Auth0 для некоторых запросов API
Сведения о Swagger https://esi.tech.ccp.is/ui/ URL-адрес Auth0 https://login.eveonline.com/oauth/authorize?
в настоящее время я пытаюсь войти в систему систематически, но я получаю сообщение об ошибке
JsonReaderException: неожиданный символ, обнаруженный при анализе значения: <. Путь '', строка 0, позиция 0.
Я думаю, что я делаю процесс неправильно в первую очередь, и это просто пытается передать по умолчанию json {"error": "invalid_request", "error_description": "Некоторые параметры либо отсутствуют, либо недействительны"}
Может ли кто-нибудь помочь мне указать, что мне не хватает, пожалуйста
private static void Main()
{
var t = Task.Run(() => LoginAsync());
t.Wait();
}
private static async Task LoginAsync()
{
const string URL = "https://login.eveonline.com/oauth/authorize?";
AuthenticationApiClient client = new AuthenticationApiClient(new Uri(URL));
var cred = new Auth0.AuthenticationApi.Models.AuthenticationRequest
{
ClientId = "abcdef",
Username = "UN",
Password = "PW",
Scope = "esi-markets.structure_markets.v1",
Connection = "Username-Password-Authentication"
};
Auth0.AuthenticationApi.Models.AuthenticationResponse response = await client.AuthenticateAsync(cred);
}
Я пытаюсь получить токен авторизации, чтобы я мог выполнять с ним дополнительные запросы.
Я новичок в auth0 и очень начинающий.
Большое спасибо,
1 ответ
Вы пытаетесь получить токен доступа, используя неявное предоставление, которое является неправильным. Неявное предоставление должно выполняться только в браузере (клиент Javascript). Для неинтерактивного клиента вы можете внедрить Предоставление учетных данных клиента или Предоставление пароля владельца ресурса для получения токена доступа. Сначала создайте клиент Machine to Machine и используйте его учетные данные для токена. Следующий код реализует предоставление учетных данных клиента.
class Program
{
private static string accessToken;
private static async Task Main(string[] args)
{
await ClientCredentialsFlow();
}
protected static async Task ClientCredentialsFlow()
{
var body = new Model
{
grant_type = "client_credentials",
client_id = "[client id]",
client_secret = "[client secret]",
audience = "[API Identifier]"
};
using (var client = new HttpClient())
{
var content = JsonConvert.SerializeObject(body);
var stringContent = new StringContent(content, Encoding.UTF8, "application/json");
var res = await client.PostAsync("https://[domain].auth0.com/oauth/token", stringContent);
var responseBody = await res.Content.ReadAsStringAsync();
var deserilizeBody = JsonConvert.DeserializeObject<AuthResponseModel>(responseBody);
accessToken = deserilizeBody.access_token;
Console.WriteLine(accessToken);
}
}
internal class Model
{
public string grant_type { get; set; }
public string client_id { get; set; }
public string client_secret { get; set; }
public string audience { get; set; }
}
internal class AuthResponseModel
{
public string access_token { get; set; }
public string scopes { get; set; }
public string expires_in { get; set; }
public string token_type { get; set; }
}
}
}
Чтобы реализовать предоставление пароля владельца ресурса, посмотрите следующий документ. https://auth0.com/docs/api-auth/tutorials/password-grant