2016-05-03 3 views
2

После нескольких часов поиска в Microsoft перепутала документацию API для своих продуктов, я до сих пор не знаю, как аутентифицировать запрос API для отдыха в пакете azure в windows. Прежде всего, я хочу создать API, который автоматизирует процесс развертывания виртуальной машины, но я не могу найти документацию о том, как получить токен аутентификации для доступа к ресурсам.Apache Pack REST API Authentication

В некоторых документах указано использование ADFS, но не даны ссылки на API REST ADFS для аутентификации.

И я не хочу использовать ADFS в первую очередь. Я хочу аутентифицироваться с использованием интерфейса AZURE и администратора.

В заключение, если кто-либо может предоставить любую помощь в аутентификации REST API, это сделает мой день. Спасибо заранее.

ответ

0

Вы можете использовать следующий PowerShell для получения токена доступа.

Add-Type -Path 'C:\Program Files\Microsoft Azure Active Directory Connect\Microsoft.IdentityModel.Clients.ActiveDirectory.dll' 

$tenantID = "<the tenant id of you subscription>" 
$authString = "https://login.windows.net/$tenantID" 

# It must be an MFA-disabled admin. 
$username = "<the username>" 
$password = "<the password>" 

# The resource can be https://graph.windows.net/ if you are using graph api. 
# Or, https://management.azure.com/ if you are using ARM. 
$resource = "https://management.core.windows.net/" 

# This is the common client id. 
$client_id = "1950a258-227b-4e31-a9cf-717495945fc2" 

$creds = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" ` 
    -ArgumentList $username,$password 

$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" ` 
    -ArgumentList $authString 

$authenticationResult = $authContext.AcquireToken($resource,$client_id,$creds) 

# An Authorization header can be formed like this. 
$authHeader = $authenticationResult.AccessTokenType + " " + $authenticationResult.AccessToken 
+0

Эй, Джек ... Это для Лазурного пакета или стека ??? Я особенно ищу лазурный пакет ... –

+0

Я считаю, что они те же, кроме конечной точки и ресурса. вы можете использовать 'Get-MgmtSvcToken' и добавить параметр' -Debug' для проверки. –

-2

Я занимаюсь аналогичной работой, как и вы.

 static string GetAspAuthToken(string authSiteEndPoint, string userName, string password) 
    { 

     var identityProviderEndpoint = new EndpointAddress(new Uri(authSiteEndPoint + "/wstrust/issue/usernamemixed")); 

     var identityProviderBinding = new WS2007HttpBinding(SecurityMode.TransportWithMessageCredential); 
     identityProviderBinding.Security.Message.EstablishSecurityContext = false; 
     identityProviderBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; 
     identityProviderBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 

     var trustChannelFactory = new WSTrustChannelFactory(identityProviderBinding, identityProviderEndpoint) 
     { 
      TrustVersion = TrustVersion.WSTrust13, 
     }; 
     //This line is only if we're using self-signed certs in the installation 
     trustChannelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication() { CertificateValidationMode = X509CertificateValidationMode.None }; 

     trustChannelFactory.Credentials.SupportInteractive = false; 
     trustChannelFactory.Credentials.UserName.UserName = userName; 
     trustChannelFactory.Credentials.UserName.Password = password; 

     var channel = trustChannelFactory.CreateChannel(); 
     var rst = new RequestSecurityToken(RequestTypes.Issue) 
     { 
      AppliesTo = new EndpointReference("http://azureservices/TenantSite"), 
      TokenType = "urn:ietf:params:oauth:token-type:jwt", 
      KeyType = KeyTypes.Bearer, 
     }; 

     RequestSecurityTokenResponse rstr = null; 
     SecurityToken token = null; 


     token = channel.Issue(rst, out rstr); 
     var tokenString = (token as GenericXmlSecurityToken).TokenXml.InnerText; 
     var jwtString = Encoding.UTF8.GetString(Convert.FromBase64String(tokenString)); 

     return jwtString; 
    } 

Параметр «authSiteEndPoint» - это URL-адрес вашего сайта для идентификации владельца. по умолчанию порт 30071.

Вы можете найти какой-либо ресурс здесь: https://msdn.microsoft.com/en-us/library/dn479258.aspx

Образец программы «SampleAuthApplication» может решить ваш вопрос.

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