/// <summary> /// Retrieves and returns the Management Service access token for the specified user credentials. /// </summary> /// <param name="accessUri">The <see cref="Uri"/> to the Management Service <c>GetAccessToken</c> operation.</param> /// <param name="credentials">The credentials to be used to authenticate the user.</param> /// <returns>An instance of <see cref="AccessTokenResult"/> with the retrieved access token and cookie.</returns> public static AccessTokenResult GetAccessToken(Uri accessUri, SqlAuthenticationCredentials credentials) { if (accessUri == null) { throw new ArgumentNullException("accessUri"); } if (credentials == null) { throw new ArgumentNullException("credentials"); } HttpWebRequest request = CreateGetAccessTokenRequest(accessUri, credentials); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); AccessTokenResult result = RetrieveAccessTokenFromResponse(response); return(result); }
/// <summary> /// Retrieves and returns the access token from the specified response or returns <c>null</c> /// if was not retrieved. /// </summary> /// <param name="response">The <see cref="HttpWebResponse"/> to the Management Service <c>GetAccessToken</c> operation.</param> /// <returns>An instance of <see cref="AccessTokenResult"/> with the retrieved access token and cookie.</returns> private static AccessTokenResult RetrieveAccessTokenFromResponse(HttpWebResponse response) { AccessTokenResult result = null; // Read the response into a stream Stream dataStream = response.GetResponseStream(); if (dataStream != null) { string tokenXml; using (StreamReader streamReader = new StreamReader(dataStream, Encoding.UTF8)) { tokenXml = streamReader.ReadToEnd(); } // Must have both a token and cookie for success string accessToken = XElement.Parse(tokenXml).Value; Cookie accessCookie = response.Cookies[DataServiceConstants.AccessCookie]; result = new AccessTokenResult(accessToken, accessCookie); } return(result); }
/// <summary> /// Initializes a new instance of the <see cref="ServerDataServiceSqlAuth"/> class. /// </summary> /// <param name="managementServiceUri">The server's management service Uri.</param> /// <param name="connectionType">The server connection type with the server name</param> /// <param name="sessionActivityId">An activity ID provided by the user that should be associated with this session.</param> /// <param name="accessToken">The authentication access token to be used for executing web requests.</param> private ServerDataServiceSqlAuth( Uri managementServiceUri, DataServiceConnectionType connectionType, Guid sessionActivityId, AccessTokenResult accessToken) : base(new Uri(managementServiceUri, connectionType.RelativeEntityUri)) { this.sessionActivityId = sessionActivityId; this.connectionType = connectionType; this.accessToken = accessToken; // Generate a requestId and retrieve the server name this.clientRequestId = SqlDatabaseManagementHelper.GenerateClientTracingId(); this.serverName = this.Servers.First().Name; }
/// <summary> /// Creates and returns a new instance of the <see cref="ServerDataServiceSqlAuth"/> class which /// connects to the specified server using the specified credentials. /// </summary> /// <param name="managementServiceUri">The server's management service <see cref="Uri"/>.</param> /// <param name="sessionActivityId">An activity ID provided by the user that should be associated with this session.</param> /// <param name="accessTokenResult">The accessToken to be used to authenticate the user.</param> /// <param name="serverName">The name of the server to connect to. (Optional)</param> /// <returns>An instance of <see cref="ServerDataServiceSqlAuth"/> class.</returns> public static ServerDataServiceSqlAuth Create( Uri managementServiceUri, Guid sessionActivityId, AccessTokenResult accessTokenResult, string serverName) { if (managementServiceUri == null) { throw new ArgumentNullException("managementServiceUri"); } if (accessTokenResult == null) { throw new ArgumentNullException("accessTokenResult"); } // Create a ServerDataServiceSqlAuth object if (serverName == null) { return new ServerDataServiceSqlAuth( managementServiceUri, new DataServiceConnectionType(ServerModelConnectionType), sessionActivityId, accessTokenResult); } else { return new ServerDataServiceSqlAuth( managementServiceUri, new DataServiceConnectionType(ServerModelConnectionType, serverName), sessionActivityId, accessTokenResult); } }
/// <summary> /// Retrieves and returns the access token from the specified response or returns <c>null</c> /// if was not retrieved. /// </summary> /// <param name="response">The <see cref="HttpWebResponse"/> to the Management Service <c>GetAccessToken</c> operation.</param> /// <returns>An instance of <see cref="AccessTokenResult"/> with the retrieved access token and cookie.</returns> private static AccessTokenResult RetrieveAccessTokenFromResponse(HttpWebResponse response) { AccessTokenResult result = null; // Read the response into a stream Stream dataStream = response.GetResponseStream(); if (dataStream != null) { string tokenXml; using (StreamReader streamReader = new StreamReader(dataStream, Encoding.UTF8)) { tokenXml = streamReader.ReadToEnd(); } // Must have both a token and cookie for success string accessToken = XElement.Parse(tokenXml).Value; Cookie accessCookie = response.Cookies[DataServiceConstants.AccessCookie]; result = new AccessTokenResult(accessToken, accessCookie); } return result; }
/// <summary> /// Validates the specified <see cref="AccessTokenResult"/> object and throws an exception /// in case it is invalid. /// </summary> /// <param name="serviceRoot">The server root <see cref="Uri"/>.</param> /// <param name="accessToken">The <see cref="AccessTokenResult"/> object to be validated.</param> internal static void ValidateAccessToken(Uri serviceRoot, AccessTokenResult accessToken) { if (accessToken == null) { throw new InvalidOperationException( string.Format( CultureInfo.InvariantCulture, Resources.InvalidAuthentication, serviceRoot.AbsoluteUri.ToString())); } }