Проверка подлинности REST API Azure Pack

После нескольких часов поиска в Microsoft испортили документацию API для своих продуктов, я все еще не знаю, как аутентифицировать запрос API отдыха в дистрибутиве Windows Azure Pack. В первую очередь я хочу создать API, который автоматизирует процесс развертывания виртуальной машины, но я не могу найти никакой документации о том, как получить токен аутентификации для доступа к ресурсам.

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

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

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


person Rishabh Soni    schedule 03.05.2016    source источник


Ответы (2)


Вы можете использовать следующую оболочку 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
person Jack Zeng    schedule 03.05.2016
comment
Привет, Джек ... Это для Azure Pack или стека ??? Я особенно ищу лазурный пакет ... - person Rishabh Soni; 03.05.2016
comment
Я считаю, что они такие же, за исключением конечной точки и ресурса. вы можете использовать Get-MgmtSvcToken и добавить параметр -Debug для проверки. - person Jack Zeng; 04.05.2016

Я делаю аналогичную работу, как и вы.

        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 может решить ваш вопрос.

person Adam.Kao    schedule 23.11.2016