Подключение Zendesk к серверу идентификаций4

#identityserver4 #zendesk

Вопрос:

Использование IdentityServer4 в качестве выделенного ASP.NET Основной сервис, в котором размещается ASP.NET Страницы, скомпонованные из MVC. У нас есть наше приложение (интерфейс React), которое перенаправляет на сервер идентификации, если пользователь не вошел в систему, используя процессы OAUTH

Проблема; Мы хотели бы настроить zendesk в качестве нашего справочного центра, но мы бы хотели, чтобы это было за стеной вошедшего пользователя. Zendesk допускает токен SAML или JWT (это даже не стандарт аутентификации, просто механизм токенов, но в любом случае). SAML недоступен на сервере IdentityServer, если только не требуется довольно дорогое дополнение.

Что мы хотели бы сделать, так это пойти по пути использования подхода с использованием токенов JWT. Насколько я понял, мы заполняем URL-адрес для входа в систему в zendesk, который ссылается на наше приложение для идентификации. После входа в систему (или когда пользователь уже вошел в систему) нам нужно перенаправить пользователя на определенную конечную точку Zendesk, добавив к URL-адресу токен JWT.

Я понимаю, что есть TokenClient, который позволяет вызывать правильные конечные точки для генерации токенов, но разве это не неправильный инструмент для использования здесь, поскольку это означало бы, что процессы будут исходить и снова входить в конечную точку подключения/токена? Есть ли какой-то класс, который мы можем использовать в IdentityServer для создания такого токена?

Спасибо!

Ответ №1:

У Zendesk есть несколько примеров кода для этого сценария: примеры. В частности, пример обработчика C#.

В вашем случае вы можете добавить пример кода в контроллер api под названием LaunchZendeskController.

Пример прототипа

 [ApiController]
    [Route("[controller]")]
    public class LaunchZendeskController : ControllerBase
    {
        private const string SHARED_KEY = "{my zendesk token}";
        private const string SUBDOMAIN = "{my zendesk subdomain}";

        [HttpGet]
        public IActionResult Get()
        {
            TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
            int timestamp  = (int) t.TotalSeconds;

            var payload = new Dictionary<string, object>() {
                { "iat", timestamp },
                { "jti", System.Guid.NewGuid().ToString() }
                // { "name", currentUser.name },
                // { "email", currentUser.email }
            };
            string token = JWT.JsonWebToken.Encode(payload, SHARED_KEY, JWT.JwtHashAlgorithm.HS256);
            string redirectUrl = "https://"   SUBDOMAIN   ".zendesk.com/access/jwt?jwt="   token;
            
            return Redirect(redirectUrl);
        }    
    }
 

Таким образом, когда вы просматриваете/перенаправляете на https://YourIdpUrl/launchzendesk токен будет создан с использованием сгенерированного вами общего ключа, и вы будете перенаправлены в Zendesk с созданным токеном.

Примечание: образец довольно старый, и для ядра dotnet вам, вероятно, следует использовать другой класс генератора токенов. Скорее всего, используйте пакет nuget: System.Идентификационная модель.Токены.Jwt