Конечная точка подключения / токена IdentityServer3 всегда возвращает 401: не авторизовано - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь настроить IdentityServer3 для моего проекта.

Когда я запускаю IdentityServer3 на локальной машине разработки, все работает нормально, но когда я размещаю его на общем сервере, я получаю ошибку 401.Я пытаюсь получить доступ к токену с помощью конечной точки connect \ token.Вот конфигурация для identityserver3

IdentityServerOptions identityServerOptions = new IdentityServerOptions
{
    SiteName = "Ripple IdentityServer",
    SigningCertificate = LoadCertificate(),
    AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions
    {
        EnablePostSignOutAutoRedirect = true,
    },
    LoggingOptions = new LoggingOptions
    {
        EnableWebApiDiagnostics = true,
        WebApiDiagnosticsIsVerbose = true,
        EnableHttpLogging = true,
        EnableKatanaLogging = true
    },

    Factory = factory,
};

Странно то, что я не получаю никаких журналов.Я знаю, что журналы работают, потому что, когда я получаю доступ к конечной точке подключения / авторизации, я вижу информацию журнала.Вот моя регистрация клиента

client = new Client
{
    ClientId = app.Id,
    ClientName = app.Name,
    Flow = Flows.ResourceOwner,
    AllowedScopes = app.AllowedScopes.Split(';').ToList(),
    AllowedCorsOrigins = new List<string> { "*" }
};
if (app.Secret != null && app.Secret != "")
{
    client.ClientSecrets = new System.Collections.Generic.List<Secret>();
    app.Secret = app.Secret.Replace("{", "").Replace("}", "");

    string[] secrets = app.Secret.Split(',');
    foreach (var s in secrets)
    {
        client.ClientSecrets.Add(new Secret(s.Sha256()));
    }
}

Вот код клиента для получения токена доступа

var data = new StringContent(string.Format("grant_type=password&username={0}&password={1}&Domain={2}&scope={3}",
HttpUtility.UrlEncode(username),
HttpUtility.UrlEncode(password),
HttpUtility.UrlEncode(domainId),
HttpUtility.UrlEncode(requiredScope)), Encoding.UTF8, "application/x-www-form-urlencoded");

client.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue(
                "Basic",
                Convert.ToBase64String(
                System.Text.ASCIIEncoding.ASCII.GetBytes(
                string.Format("{0}:{1}", applicationId, appSecretKey))));

HttpResponseMessage response = client.PostAsync("connect/token", data).Result;

Без логов я полностью потерялся.Где мне искать дополнительную информацию для отладки?

1 Ответ

0 голосов
/ 27 июня 2018

Найденное решение.Общий хостинг вроде godaddy не поддерживает обычную аутентификацию.Поэтому запрос на доступ к токену отклонялся на уровне сервера.Это было причиной, почему ни один файл журнала не генерировался.

Чтобы обойти эту проблему, я должен реализовать свою собственную версию на ISecretParser.В этой реализации я проанализировал мой собственный заголовок аутентификации

, например, Аутентификация MyAuth ClientID: ClientSecret

Затем зарегистрируйте этот анализатор в IdentityServerServiceFactory, и он работал как шарм.

Я надеюсь, что это решение поможет другим, кто пытается разместить IdentiyServer3 на общих серверах.

...