#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