0

Я использую аутентификацию на основе токена на основе Api с использованием промежуточного ПО OWIN; токен сгенерирован успешно, но я не могу его декодировать; например я не могу извлечь из него имя пользователя и пароль; Вот моя конфигурация свой стартовый кодАутентификация на основе аутентификации на основе api: - Не удалось декодировать токен из строки base64, чтобы получить имя пользователя и пароль

var oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/api/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 
     // Token Generation 
     app.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

мой код, который UEd отправить токена

static async Task RunAsync(JObject token) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.Timeout = new TimeSpan(1000000000000); 
      client.BaseAddress = new Uri("http://localhost/SampleApp/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token["token_type"].ToString(), 
       token["access_token"].ToString()); 
    }} 

мой authetication код

var authenticationSchema = httpContext.Request.Headers["Authorization"]; 
      if (!String.IsNullOrWhiteSpace(authenticationSchema)) 
       authentication = AuthenticationHeaderValue.Parse(authenticationSchema); 

if (authentication != null) 
{ 
var unencoded = Convert.FromBase64String(authentication.Parameter); 
     var userpw = Encoding.GetEncoding("iso-8859- 1").GetString(unencoded); 
     var creds = userpw.Split(':'); 
     return new Tuple<string, string>(creds[0], creds[1]); 
} 

и код не удалось при попытке для декодирования кода из строки base64 примечание: - мой токен-образец равен 3K8vHKHA2ZsKfKbvzUbo4a2sat 2JLzvvyxCZ0KSD6s1wUS3t3oDPXuQ89aTmGpsG4ZL8O0cr8M9EUeZGtdM6FBwR7gLFcLZkTaimFGKyyZMNce9trQavVTzs6gam6qach1rPTLv_gIYGgPmM-401PZsr89BIXw4acTpJL3KbXs8y7PQ-о-eTV2IA8euCVkqC02iEnAzmS0SwhBouISCC-HvcNpE2aNixg4JXEt8EslU вы можете увидеть прикрепленный за исключением enter image description here

+0

любая помощь по этой проблеме – yo2011

ответ

0

Насколько я могу видеть из кода, маркер доступа отправляется равнину к серверу; но вы должны кодировать маркер доступа на стороне клиента, как:

client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue(token["token_type"].ToString(), 
     Convert.ToBase64String(Encoding.GetEncoding("iso-8859-1").GetBytes(token["access_token"].ToString()))); 

Затем вы можете преобразовать маркер доступа из base64 строки на стороне сервера. Строковое значение маркера доступа, которое вы указали, не является допустимой строкой Base64, как указано в сообщении об исключении.