2016-09-29 1 views
1

Есть ли способ получить токен SAML для пользователя идентификатора пула приложений (настроенный пользователь)?Как получить токен SAML из идентификатора пула приложений (для настроенного пользователя)?

При настройке параметров пула приложений пул хранит записи конфигурации (имя пользователя & пароль) в applicationHost.config в папке% systemroot% \ System32 \ Inetsrv \ config.

Когда приложение запускается, оно выбирает имя пользователя и зашифрованный пароль для аутентификации. После успешной проверки подлинности он будет следовать аутентификации на основе токенов для последующих вызовов или всегда будет следовать базовой аутентификации?

Если это токен, то как я могу получить токен SAML для пользователя идентификатора пула приложений после первого ответа?

если есть ссылки, пожалуйста, дайте мне знать.

Заранее спасибо.

ответ

0

Ans 1: С помощью потока Адал, чтобы получить JWT маркер для вошедшего пользователя,

if (!AdfsConfiguration.IsInitialized) throw new SecurityException(Constants.AdfsConfigurationInitilizationExceptionMessage); 
if (string.IsNullOrEmpty(AdfsConfiguration.AdfsAuthorityUrl)) throw new SecurityException(Constants.AdfsConfigurationAdfsAuthorityUrlInitilizationExceptionMessage); 

try 
{ 
    var authenticationContext = new AuthenticationContext(string.Format(AdfsConfiguration.AdfsAuthorityUrl, AdfsConfiguration.AdfsInstance, AdfsConfiguration.Resource), false); 

    var asyncRequest = authenticationContext.AcquireTokenAsync(AdfsConfiguration.Resource, AdfsConfiguration.ClientId, new Uri(AdfsConfiguration.RedirectUri), new PlatformParameters(PromptBehavior.Auto)); 
    var accessToken = asyncRequest.Result.AccessToken; 
    return accessToken; 
} 
catch (Exception exp) 
{ 
    var additionalInfo = $" additionalInfo : [authenticationContext : {string.Format(AdfsConfiguration.AdfsAuthorityUrl, AdfsConfiguration.AdfsInstance, AdfsConfiguration.Resource)}]"; 
    throw new SecurityException($"AdfsAuthorization.GetAdfsOAuthJwtAccessTokenForWinAppUserUsingAdal is failed, {additionalInfo}", exp); 
} 
0

Ans 2: потоком Auth кода, чтобы получить JWT маркер для входа в систему пользователя или пула приложений пользователя идентичности.

шаг 1: Получить Auth код с сервера служб федерации Active Directory

 var authUrl = string.Format(AdfsConfiguration.AdfsAuthUrl, AdfsConfiguration.AdfsInstance, AdfsConfiguration.ClientId, AdfsConfiguration.Resource, AdfsConfiguration.UrlEncodedRedirectUri); 
     var authCode = ""; 

     try 
     { 
      do 
      { 
       var result = await Client.GetAsync(authUrl); 
       await result.Content.ReadAsStringAsync(); 
       IEnumerable<string> values; 
       if (result.Headers.TryGetValues("location", out values)) 
       { 
        foreach (string s in values) 
        { 
         if (s.Contains("code=")) 
         { 
          authUrl = ""; 
          authCode = s.Substring(s.IndexOf("code=", StringComparison.Ordinal) + 5); 
         } 
         else 
         { 
          authUrl = s; 
         } 
        } 
       } 
       else 
       { 
        authUrl = ""; 
       } 
      } while (!string.IsNullOrEmpty(authUrl)); 

      return authCode; 
     } 
     catch (Exception exp) 
     { 
      var additionalInfo = $"additionalInfo : [authUrl: {authUrl}]"; 
      throw new SecurityException($"AdfsAuthorization.GetAuthCodeForWinAppUserAsync is failed, {additionalInfo}", exp); 
     } 

Шаг 2: Pass Auth код, чтобы получить JWT фишку с сервера служб федерации Active Directory

 if (!AdfsConfiguration.IsInitialized) throw new SecurityException(Constants.AdfsConfigurationInitilizationExceptionMessage); 

     var client = new WebClient(); 
     try 
     { 
      if (AdfsConfiguration.UseProxy == "Y") 
      { 
       var proxyObject = new WebProxy("Proxy", 80) { Credentials = CredentialCache.DefaultNetworkCredentials }; 
       client.Proxy = proxyObject; 
      } 

      //Uri address = new Uri(String.Format("https://{0}/adfs/oauth2/token/", AdfsInstance)); 
      Uri address = new Uri(string.Format(AdfsConfiguration.AdfsTokenServiceUrl, AdfsConfiguration.AdfsInstance)); 

      Uri redirectAddress = new Uri(AdfsConfiguration.RedirectUri); 

      NameValueCollection values = new NameValueCollection 
      { 
       {"client_id", AdfsConfiguration.ClientId}, 
       {"grant_type", "authorization_code"}, 
       {"code", code}, 
       {"redirect_uri", redirectAddress.ToString()} 
      }; 

      byte[] responseBytes = client.UploadValues(address, "POST", values); 

      string response = System.Text.Encoding.UTF8.GetString(responseBytes); 

      return response; 

     } 
     catch (Exception exp) 
     { 
      var additionalInfo = $" additionalInfo : [address: {string.Format(AdfsConfiguration.AdfsTokenServiceUrl, AdfsConfiguration.AdfsInstance) }, redirect Uri :{AdfsConfiguration.RedirectUri}]"; 
      throw new SecurityException($"AdfsAuthorization.GetAdfsOAuthTokenByAuthCode is failed, {additionalInfo}", exp); 
     } 
     finally 
     { 
      client.Dispose(); 
     } 
0

Получить SAML утверждение для пула приложений Идентичность или Записан на пользователе:

Смежные вопросы