2

I am trying to connect to my azure subscription , I have a code which allow me to get the Token

            var authContext = new AuthenticationContext(string.Format
             ("https://login.windows.net/{0}", tenantId));
            var credential = new ClientCredential(applicationId, password);
            AuthenticationResult token = authContext.AcquireTokenAsync
              ("https://management.core.windows.net/", credential).Result;

            if (token == null)
            {
                Console.WriteLine("Failed to obtain the token");
                return;
            }

from this step i don't know how to use ResourceManagementClient Class to get connected ...

Notlikethat
  • 20,095
  • 3
  • 40
  • 77
Maroine Abdellah
  • 576
  • 1
  • 5
  • 21

1 Answers1

10

Once you got the token, you can use it like this with a "ResourceManagementClient":

    string token = authenticationResult.CreateAuthorizationHeader().Substring("Bearer ".Length);

    Microsoft.Rest.ServiceClientCredentials credentials = new TokenCredentials(token);

    using (var rgClient = new ResourceManagementClient(credentials))
    {
        rgClient.SubscriptionId = "xxxxxxx-xxxxx-xxxxxxxx-xxxxxxx";
        var rgs = rgClient.ResourceGroups.List();
    };

You can create your own "TokenCredentials" class which inherit From "ServiceClientCredentials" like this :

public class TokenCredentials : ServiceClientCredentials
{

    /// <summary>
    /// The bearer token type, as serialized in an http Authentication header.
    /// </summary>
    private const string BearerTokenType = "Bearer";

    /// <summary>
    /// Gets or sets secure token used to authenticate against Microsoft Azure API. 
    /// No anonymous requests are allowed.
    /// </summary>
    protected ITokenProvider TokenProvider { get; private set; }

    /// <summary>
    /// Initializes a new instance of the <see cref="TokenCredentials"/>
    /// class with the given 'Bearer' token.
    /// </summary>
    /// <param name="token">Valid JSON Web Token (JWT).</param>
    public TokenCredentials(string token)
        : this(token, BearerTokenType)
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="TokenCredentials"/>
    /// class with the given token and token type.
    /// </summary>
    /// <param name="token">Valid JSON Web Token (JWT).</param>
    /// <param name="tokenType">The token type of the given token.</param>
    public TokenCredentials(string token, string tokenType)
        : this(new StringTokenProvider(token, tokenType))
    {
        if (string.IsNullOrEmpty(token))
        {
            throw new ArgumentNullException("token");
        }
        if (string.IsNullOrEmpty(tokenType))
        {
            throw new ArgumentNullException("tokenType");
        }
    }

    /// <summary>
    /// Create an access token credentials object, given an interface to a token source.
    /// </summary>
    /// <param name="tokenProvider">The source of tokens for these credentials.</param>
    public TokenCredentials(ITokenProvider tokenProvider)
    {
        if (tokenProvider == null)
        {
            throw new ArgumentNullException("tokenProvider");
        }

        this.TokenProvider = tokenProvider;
    }

    /// <summary>
    /// Apply the credentials to the HTTP request.
    /// </summary>
    /// <param name="request">The HTTP request.</param>
    /// <param name="cancellationToken">Cancellation token.</param>
    /// <returns>
    /// Task that will complete when processing has completed.
    /// </returns>
    public async override Task ProcessHttpRequestAsync(HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        if (request == null)
        {
            throw new ArgumentNullException("request");
        }

        if (TokenProvider == null)
        {
            throw new ArgumentNullException("Token provider");
        }

        request.Headers.Authorization = await TokenProvider.GetAuthenticationHeaderAsync(cancellationToken);
        await base.ProcessHttpRequestAsync(request, cancellationToken);
    }
}
Thibaut Ranise
  • 705
  • 4
  • 12
  • hi sir , i think i have a reference probleme Cannot convert from Microsoft.Rest.TokenCredentials to Microsoft.Azure.SubscriptionCloudCredentials i tryed to find it in Nu get but ... ps : le monde est Petit Thibaut , c'est maroine , on s'est vu dans l'azure boot camp avec Maxime ^^ – Maroine Abdellah May 30 '16 at 14:32
  • You can create your own "TokenCredentials" class ! I just edited the post ! – Thibaut Ranise May 30 '16 at 14:42