Как извлечь и получить претензию из токена?
Я искал точный ответ, но кажется, что большинство ответов - это вызов клиента и выходящий за рамки.
Вопрос: У меня уже есть токен доступа. Как получить претензию, используя код C# только по токену доступа?
Я думаю: ниже приведены те же вопросы, но нет ответов, я думаю, что подходит.
Как получить претензии из аутентифицированного SecurityToken
2 ответа
Установочный пакет Newtonsoft.Json
Токен доступа - это просто JSON в кодировке base64. Вы можете проанализировать токен следующим образом
string token =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";
var parts = token.Split('.');
var decoded = Convert.FromBase64String(parts[1]);
var part = Encoding.UTF8.GetString(decoded);
var jwt = JObject.Parse(part);
var name = jwt["name"].Value<string>();
ОБНОВИТЬ
- Парсинг токена доступа на клиенте не рекомендуется, токен доступа должен анализироваться только на сервере ресурсов.
- Вы должны проверить токен доступа на сервере ресурсов, чтобы убедиться, что токен не был подделан в пути.
Большую часть времени вам не нужно анализировать токен, как описано выше. Просто используйте рекомендованную библиотеку JWT, которая выполняет как проверку, так и анализ. например
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
Rawel предоставил очень удобный образец! Одна небольшая проблема, с которой я столкнулся, заключалась в пространствах имен, которые мне пришлось использовать (просто для того, чтобы это было легче найти для следующего человека, поскольку я еще не могу публиковать комментарии):
using System.Text;
using Newtonsoft.Json.Linq