У меня есть приложение ASP.NET MVC, и я пытаюсь интегрировать продукт zendesk (контактную форму и справочный центр) в приложение.Справочный центр и статьи ограничены, поэтому моему клиентскому приложению необходимо отправить токен Jwt в zendesk для аутентификации.Согласно рекомендациям, клиентское приложение должно создать токен Jwt, используя общий секрет (созданный в zendesk
), а затем установить токен в window.zESettings
объект при каждой загрузке страницы.Итак, я делаю что-то вроде ниже на _layout.cshtml
странице
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My ASP.NET Application</title>
@Styles.Render("~/Content/css")
<script type="text/javascript">
window.zESettings = {
authenticate: { jwt: 'MY JWT TOKEN' }
};
</script>
<script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=somekey"></script>
</head>
На стороне сервера у меня есть код для создания токена JWT с использованием JWT пакета
public class JwtTokenHelper
{
private const string SHARED_KEY = "SOME SECRET KEY CREATED IN ZEN DESK";
public static string CreateToken()
{
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", "foo bar" },
{ "email", "test@mydomain.com" }
};
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
var token = encoder.Encode(payload, SHARED_KEY);
return token;
}
}
Вопросы
1> Как получить токен, созданный на сервере и настроенный на window.zESettings
?
2> Есть ли способ создать токен, используя вместо этого System.IdentityModel.Tokens.Jwt
использовать JWT пакет?