/// <inheritdoc/>
        public async Task <MexDocument> GetMexDocumentAsync(string federationMetadataUrl, RequestContext requestContext)
        {
            IDictionary <string, string> msalIdParams = MsalIdHelper.GetMsalIdParameters(requestContext.Logger);

            var          uri          = new UriBuilder(federationMetadataUrl);
            HttpResponse httpResponse = await _httpManager.SendGetAsync(
                uri.Uri,
                msalIdParams,
                requestContext.Logger,
                cancellationToken : requestContext.UserCancellationToken).ConfigureAwait(false);

            if (httpResponse.StatusCode != System.Net.HttpStatusCode.OK)
            {
                string message = string.Format(CultureInfo.CurrentCulture,
                                               MsalErrorMessage.HttpRequestUnsuccessful + "See https://aka.ms/msal-net-ropc for more information. ",
                                               (int)httpResponse.StatusCode, httpResponse.StatusCode);

                throw MsalServiceExceptionFactory.FromHttpResponse(
                          MsalError.AccessingWsMetadataExchangeFailed,
                          message,
                          httpResponse);
            }

            var mexDoc = new MexDocument(httpResponse.Body);

            requestContext.Logger.InfoPii(
                $"MEX document fetched and parsed from '{federationMetadataUrl}'",
                "Fetched and parsed MEX");

            return(mexDoc);
        }
Beispiel #2
0
        private void LogMessage(string logMessage, LogLevel logLevel, bool containsPii)
        {
            if ((logLevel > Level) || (!PiiLoggingEnabled && containsPii))
            {
                return;
            }

            //format log message;
            string correlationId = (CorrelationId.Equals(Guid.Empty))
                ? string.Empty
                : " - " + CorrelationId;

            string os = "N/A";

            if (MsalIdHelper.GetMsalIdParameters().ContainsKey(MsalIdParameter.OS))
            {
                os = MsalIdHelper.GetMsalIdParameters()[MsalIdParameter.OS];
            }


            string log = string.Format(CultureInfo.InvariantCulture, "MSAL {0} {1} {2} [{3}{4}]{5} {6}",
                                       MsalIdHelper.GetMsalVersion(),
                                       MsalIdHelper.GetMsalIdParameters()[MsalIdParameter.Product],
                                       os, DateTime.UtcNow, correlationId, Component, logMessage);

            if (DefaultLoggingEnabled)
            {
                PlatformPlugin.LogMessage(logLevel, log);
            }

            ExecuteCallback(logLevel, log, containsPii);
        }
        private Dictionary <string, string> CreateBrokerRequestDictionary(
            AuthenticationRequestParameters authenticationRequestParameters,
            AcquireTokenInteractiveParameters acquireTokenInteractiveParameters)
        {
            var brokerRequest = new Dictionary <string, string>(16);

            brokerRequest.Add(BrokerParameter.Authority, authenticationRequestParameters.Authority.AuthorityInfo.CanonicalAuthority);
            string scopes = EnumerableExtensions.AsSingleString(authenticationRequestParameters.Scope);

            brokerRequest.Add(BrokerParameter.Scope, scopes);
            brokerRequest.Add(BrokerParameter.ClientId, authenticationRequestParameters.ClientId);
            brokerRequest.Add(BrokerParameter.CorrelationId, authenticationRequestParameters.RequestContext.CorrelationId.ToString());
            brokerRequest.Add(BrokerParameter.ClientVersion, MsalIdHelper.GetMsalVersion());

            // this needs to be case sensitive because the AppBundle is case sensitive
            brokerRequest.Add(BrokerParameter.RedirectUri, authenticationRequestParameters.OriginalRedirectUriString);

            if (authenticationRequestParameters.ExtraQueryParameters?.Any() == true)
            {
                string extraQP = string.Join("&", authenticationRequestParameters.ExtraQueryParameters.Select(x => x.Key + "=" + x.Value));
                brokerRequest.Add(BrokerParameter.ExtraQp, extraQP);
            }

            brokerRequest.Add(BrokerParameter.Username, authenticationRequestParameters.Account?.Username ?? string.Empty);
            brokerRequest.Add(BrokerParameter.ExtraOidcScopes, BrokerParameter.OidcScopesValue);
            brokerRequest.Add(BrokerParameter.Prompt, acquireTokenInteractiveParameters.Prompt.PromptValue);
            if (!string.IsNullOrEmpty(authenticationRequestParameters.Claims))
            {
                brokerRequest.Add(BrokerParameter.Claims, authenticationRequestParameters.Claims);
            }

            AddCommunicationParams(brokerRequest);

            return(brokerRequest);
        }
Beispiel #4
0
        private Dictionary <string, string> CreateBrokerRequestDictionary(
            AuthenticationRequestParameters _authenticationRequestParameters,
            AcquireTokenInteractiveParameters acquireTokenInteractiveParameters)
        {
            var brokerRequest = new Dictionary <string, string>(16);

            brokerRequest.Add(BrokerParameter.Authority, _authenticationRequestParameters.Authority.AuthorityInfo.CanonicalAuthority);
            string scopes = EnumerableExtensions.AsSingleString(_authenticationRequestParameters.Scope);

            brokerRequest.Add(BrokerParameter.Scope, scopes);
            brokerRequest.Add(BrokerParameter.ClientId, _authenticationRequestParameters.ClientId);
            brokerRequest.Add(BrokerParameter.CorrelationId, _authenticationRequestParameters.RequestContext.CorrelationId.ToString());
            brokerRequest.Add(BrokerParameter.ClientVersion, MsalIdHelper.GetMsalVersion());
            brokerRequest.Add(BrokerParameter.Force, "NO");
            brokerRequest.Add(BrokerParameter.RedirectUri, _authenticationRequestParameters.RedirectUri.AbsoluteUri);

            if (_authenticationRequestParameters.ExtraQueryParameters?.Any() == true)
            {
                string extraQP = string.Join("&", _authenticationRequestParameters.ExtraQueryParameters.Select(x => x.Key + "=" + x.Value));
                brokerRequest.Add(BrokerParameter.ExtraQp, extraQP);
            }

            brokerRequest.Add(BrokerParameter.Username, _authenticationRequestParameters.Account?.Username ?? string.Empty);
            brokerRequest.Add(BrokerParameter.ExtraOidcScopes, BrokerParameter.OidcScopesValue);
            brokerRequest.Add(BrokerParameter.Prompt, acquireTokenInteractiveParameters.Prompt.PromptValue);
            brokerRequest.Add(BrokerParameter.Claims, _authenticationRequestParameters.ClaimsAndClientCapabilities);

            AddCommunicationParams(brokerRequest);

            return(brokerRequest);
        }
        private static BrokerRequest FromAuthenticationParameters(AuthenticationRequestParameters _authenticationRequestParameters)
        {
            BrokerRequest br = new BrokerRequest();

            br.Authority     = _authenticationRequestParameters.Authority.AuthorityInfo.CanonicalAuthority;
            br.Scopes        = EnumerableExtensions.AsSingleString(_authenticationRequestParameters.Scope);
            br.ClientId      = _authenticationRequestParameters.ClientId;
            br.CorrelationId = _authenticationRequestParameters.RequestContext.CorrelationId.ToString();

            br.ClientAppVersion = Application.Context.PackageManager.GetPackageInfo(
                Application.Context.PackageName,
                PackageInfoFlags.MatchAll).VersionName;
            br.ClientAppName = Application.Context.PackageName;
            br.ClientVersion = MsalIdHelper.GetMsalVersion();

            br.RedirectUri = _authenticationRequestParameters.RedirectUri;
            if (!string.IsNullOrEmpty(br.Claims))
            {
                br.Claims = _authenticationRequestParameters.Claims;
            }

            if (_authenticationRequestParameters.ExtraQueryParameters?.Any() == true)
            {
                string extraQP = string.Join("&", _authenticationRequestParameters.ExtraQueryParameters.Select(x => x.Key + "=" + x.Value));
                br.ExtraQueryParameters = extraQP;
            }

            return(br);
        }
        private Dictionary <string, string> CreateAuthorizationRequestParameters()
        {
            SortedSet <string> unionScope =
                GetDecoratedScope(
                    new SortedSet <string>(AuthenticationRequestParameters.Scope.Union(_extraScopesToConsent)));

            Dictionary <string, string> authorizationRequestParameters = new Dictionary <string, string>();

            authorizationRequestParameters[OAuth2Parameter.Scope]        = unionScope.AsSingleString();
            authorizationRequestParameters[OAuth2Parameter.ResponseType] = OAuth2ResponseType.Code;

            authorizationRequestParameters[OAuth2Parameter.ClientId]    = AuthenticationRequestParameters.ClientId;
            authorizationRequestParameters[OAuth2Parameter.RedirectUri] =
                AuthenticationRequestParameters.RedirectUri.OriginalString;

            if (!string.IsNullOrWhiteSpace(AuthenticationRequestParameters.LoginHint))
            {
                authorizationRequestParameters[OAuth2Parameter.LoginHint] = AuthenticationRequestParameters.LoginHint;
            }

            if (!string.IsNullOrEmpty(AuthenticationRequestParameters.RequestContext?.CorrelationId))
            {
                authorizationRequestParameters[OAuth2Parameter.CorrelationId] = AuthenticationRequestParameters.RequestContext.CorrelationId;
            }

            IDictionary <string, string> adalIdParameters = MsalIdHelper.GetMsalIdParameters();

            foreach (KeyValuePair <string, string> kvp in adalIdParameters)
            {
                authorizationRequestParameters[kvp.Key] = kvp.Value;
            }

            authorizationRequestParameters[OAuth2Parameter.Prompt] = _UIBehavior.PromptValue;
            return(authorizationRequestParameters);
        }
        public async Task <UserRealmDiscoveryResponse> GetUserRealmAsync(
            string userRealmUriPrefix,
            string userName,
            RequestContext requestContext)
        {
            requestContext.Logger.Info("Sending request to userrealm endpoint. ");

            IDictionary <string, string> msalIdParams = MsalIdHelper.GetMsalIdParameters(requestContext.Logger);

            var uri = new UriBuilder(userRealmUriPrefix + userName + "?api-version=1.0").Uri;

            var httpResponse = await _httpManager.SendGetAsync(
                uri,
                msalIdParams,
                requestContext.Logger,
                cancellationToken : requestContext.UserCancellationToken).ConfigureAwait(false);

            if (httpResponse.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return(JsonHelper.DeserializeFromJson <UserRealmDiscoveryResponse>(httpResponse.Body));
            }

            string message = string.Format(CultureInfo.CurrentCulture,
                                           MsalErrorMessage.HttpRequestUnsuccessful,
                                           (int)httpResponse.StatusCode, httpResponse.StatusCode);

            throw MsalServiceExceptionFactory.FromHttpResponse(
                      MsalError.UserRealmDiscoveryFailed,
                      message,
                      httpResponse);
        }
 /// <Summary>
 /// ClientApplicationBase
 /// </Summary>
 static ClientApplicationBase()
 {
     PlatformPlugin.Logger.Information(null,
                                       string.Format(CultureInfo.InvariantCulture,
                                                     "MSAL {0} with assembly version '{1}', file version '{2}' and informational version '{3}' is running...",
                                                     PlatformPlugin.PlatformInformation.GetProductName(), MsalIdHelper.GetMsalVersion(),
                                                     MsalIdHelper.GetAssemblyFileVersion(), MsalIdHelper.GetAssemblyInformationalVersion()));
 }
        private static void ValidateExceptionProductInformation(MsalException exception)
        {
            string exceptionString = exception.ToString();

            string msalProductName = PlatformProxyFactory.CreatePlatformProxy(null).GetProductName();
            string msalVersion     = MsalIdHelper.GetMsalVersion();

            Assert.IsTrue(exceptionString.Contains(msalProductName), "Exception should contain the msalProductName");
            Assert.IsTrue(exceptionString.Contains(msalVersion), "Exception should contain the msalVersion");
        }
Beispiel #10
0
 public DefaultEvent(string clientId) : base((string)(EventBase.EventNamePrefix + "default_event"))
 {
     this[EventNamePrefix + "client_id"]    = clientId;
     this[EventNamePrefix + "sdk_platform"] = PlatformPlugin.PlatformInformation.GetProductName()?.ToLowerInvariant();
     this[EventNamePrefix + "sdk_version"]  = MsalIdHelper.GetMsalVersion();
     // TODO: The following implementation will be used after the 3 helpers being implemented (in a separated PR)
     // this[EventNamePrefix + "application_name"] = MsalIdHelper.GetApplicationName();  // Not yet implemented
     // this[EventNamePrefix + "application_version"] = MsalIdHelper.GetApplicationVersion();  // Not yet implemented
     // this[EventNamePrefix + "device_id"] = MsalIdHelper.GetDeviceId();  // Not yet implemented
 }
        public void Log(LogLevel logLevel, string messageWithPii, string messageScrubbed)
        {
            if (_loggingCallback == null || logLevel > _minLogLevel)
            {
                return;
            }

            string correlationId = _correlationId.Equals(Guid.Empty)
                ? string.Empty
                : " - " + _correlationId;

            var    msalIdParameters = MsalIdHelper.GetMsalIdParameters(this);
            string os = "N/A";

            if (msalIdParameters.TryGetValue(MsalIdParameter.OS, out string osValue))
            {
                os = osValue;
            }

            bool messageWithPiiExists = !string.IsNullOrWhiteSpace(messageWithPii);
            // If we have a message with PII, and PII logging is enabled, use the PII message, else use the scrubbed message.
            bool   isLoggingPii = messageWithPiiExists && PiiLoggingEnabled;
            string messageToLog = isLoggingPii ? messageWithPii : messageScrubbed;

            string log = string.Format(CultureInfo.InvariantCulture, "{0} MSAL {1} {2} {3} [{4}{5}]{6} {7}",
                                       isLoggingPii ? "(True)" : "(False)",
                                       MsalIdHelper.GetMsalVersion(),
                                       msalIdParameters[MsalIdParameter.Product],
                                       os, DateTime.UtcNow, correlationId, ClientInformation, messageToLog);

            if (_isDefaultPlatformLoggingEnabled)
            {
                switch (logLevel)
                {
                case LogLevel.Error:
                    _platformLogger.Error(log);
                    break;

                case LogLevel.Warning:
                    _platformLogger.Warning(log);
                    break;

                case LogLevel.Info:
                    _platformLogger.Information(log);
                    break;

                case LogLevel.Verbose:
                    _platformLogger.Verbose(log);
                    break;
                }
            }

            _loggingCallback.Invoke(logLevel, log, isLoggingPii);
        }
Beispiel #12
0
        private static void AddTelemetryPropertiesToRequest(WebTokenRequest request, ICoreLogger logger)
        {
            if (s_telemetryHeaders == null)
            {
                s_telemetryHeaders = MsalIdHelper.GetMsalIdParameters(logger);
            }

            foreach (var kvp in s_telemetryHeaders)
            {
                request.Properties.Add(kvp);
            }
        }
 public DefaultEvent(IPlatformProxy platformProxy, string correlationId, string clientId, IDictionary <string, int> eventCount)
     : base(EventNamePrefix + "default_event", correlationId)
 {
     this[EventNamePrefix + "client_id"]           = clientId;
     this[EventNamePrefix + "sdk_platform"]        = platformProxy.GetProductName()?.ToLowerInvariant();
     this[EventNamePrefix + "sdk_version"]         = MsalIdHelper.GetMsalVersion();
     this[EventNamePrefix + "application_name"]    = HashPersonalIdentifier(platformProxy.CryptographyManager, platformProxy.GetCallingApplicationName()?.ToLowerInvariant());
     this[EventNamePrefix + "application_version"] = HashPersonalIdentifier(platformProxy.CryptographyManager, platformProxy.GetCallingApplicationVersion()?.ToLowerInvariant());
     this[EventNamePrefix + "device_id"]           = HashPersonalIdentifier(platformProxy.CryptographyManager, platformProxy.GetDeviceId()?.ToLowerInvariant());
     this[MsalTelemetryBlobEventNames.UiEventCountTelemetryBatchKey]   = GetEventCount(EventNamePrefix + "ui_event", eventCount);
     this[MsalTelemetryBlobEventNames.HttpEventCountTelemetryBatchKey] = GetEventCount(EventNamePrefix + "http_event", eventCount);
     this[MsalTelemetryBlobEventNames.CacheEventCountConstStrKey]      = GetEventCount(EventNamePrefix + "cache_event", eventCount);
 }
Beispiel #14
0
        private DictionaryRequestParameters CreateAuthorizationRequest(string loginHint)
        {
            HashSet <string> unionScope = this.GetDecoratedScope(new HashSet <string>(this.Scope.Union(this._additionalScope)));

            var authorizationRequestParameters = new DictionaryRequestParameters(unionScope, this.ClientKey);

            authorizationRequestParameters[OAuthParameter.ResponseType] = OAuthResponseType.Code;

            if (!string.IsNullOrWhiteSpace(this.Policy))
            {
                authorizationRequestParameters[OAuthParameter.Policy] = this.Policy;
            }

            authorizationRequestParameters[OAuthParameter.RedirectUri] = this._redirectUriRequestParameter;

            if (!string.IsNullOrWhiteSpace(loginHint))
            {
                authorizationRequestParameters[OAuthParameter.LoginHint] = loginHint;
            }

            if (this.CallState != null && this.CallState.CorrelationId != Guid.Empty)
            {
                authorizationRequestParameters[OAuthParameter.CorrelationId] = this.CallState.CorrelationId.ToString();
            }

            IDictionary <string, string> adalIdParameters = MsalIdHelper.GetMsalIdParameters();

            foreach (KeyValuePair <string, string> kvp in adalIdParameters)
            {
                authorizationRequestParameters[kvp.Key] = kvp.Value;
            }

            AddUiOptionToRequestParameters(authorizationRequestParameters);

            if (!string.IsNullOrWhiteSpace(_extraQueryParameters))
            {
                // Checks for _extraQueryParameters duplicating standard parameters
                Dictionary <string, string> kvps = EncodingHelper.ParseKeyValueList(_extraQueryParameters, '&', false, this.CallState);
                foreach (KeyValuePair <string, string> kvp in kvps)
                {
                    if (authorizationRequestParameters.ContainsKey(kvp.Key))
                    {
                        throw new MsalException(MsalError.DuplicateQueryParameter, string.Format(CultureInfo.InvariantCulture, MsalErrorMessage.DuplicateQueryParameterTemplate, kvp.Key));
                    }
                }

                authorizationRequestParameters.ExtraQueryParameter = _extraQueryParameters;
            }

            return(authorizationRequestParameters);
        }
Beispiel #15
0
        protected RequestContext CreateRequestContextAndLogVersionInfo(Guid correlationId)
        {
            var requestContext = new RequestContext(ServiceBundle, correlationId);

            requestContext.Logger.Info(
                string.Format(
                    CultureInfo.InvariantCulture,
                    "MSAL {0} with assembly version '{1}'. CorrelationId({2})",
                    ServiceBundle.PlatformProxy.GetProductName(),
                    MsalIdHelper.GetMsalVersion(),
                    requestContext.CorrelationId));

            return(requestContext);
        }
        public DefaultEvent(string clientId, IDictionary <string, int> eventCount) : base((string)(EventNamePrefix + "default_event"))
        {
            var platformProxy = PlatformProxyFactory.GetPlatformProxy();

            this[EventNamePrefix + "client_id"]           = clientId;
            this[EventNamePrefix + "sdk_platform"]        = platformProxy.GetProductName()?.ToLowerInvariant();
            this[EventNamePrefix + "sdk_version"]         = MsalIdHelper.GetMsalVersion();
            this[EventNamePrefix + "application_name"]    = HashPersonalIdentifier(platformProxy.GetCallingApplicationName()?.ToLowerInvariant());
            this[EventNamePrefix + "application_version"] = HashPersonalIdentifier(platformProxy.GetCallingApplicationVersion()?.ToLowerInvariant());
            this[EventNamePrefix + "device_id"]           = HashPersonalIdentifier(platformProxy.GetDeviceId()?.ToLowerInvariant());
            this[EventNamePrefix + "ui_event_count"]      = GetEventCount(EventNamePrefix + "ui_event", eventCount);
            this[EventNamePrefix + "http_event_count"]    = GetEventCount(EventNamePrefix + "http_event", eventCount);
            this[EventNamePrefix + "cache_event_count"]   = GetEventCount(EventNamePrefix + "cache_event", eventCount);
        }
        public async Task <UserRealmDiscoveryResponse> GetUserRealmAsync(
            string userRealmUriPrefix,
            string userName,
            RequestContext requestContext)
        {
            requestContext.Logger.Info("Sending request to userrealm endpoint.");

            var uri = new UriBuilder(userRealmUriPrefix + userName + "?api-version=1.0").Uri;

            var httpResponse = await _httpManager.SendGetAsync(uri, MsalIdHelper.GetMsalIdParameters(requestContext.Logger), requestContext).ConfigureAwait(false);

            return(httpResponse.StatusCode == System.Net.HttpStatusCode.OK
                ? JsonHelper.DeserializeFromJson <UserRealmDiscoveryResponse>(httpResponse.Body)
                : null);
        }
        protected RequestContext CreateRequestContextAndLogVersionInfo(Guid telemetryCorrelationId)
        {
            var requestContext = new RequestContext(ServiceBundle, telemetryCorrelationId);

            requestContext.Logger.Info(
                string.Format(
                    CultureInfo.InvariantCulture,
                    "MSAL {0} with assembly version '{1}', file version '{2}' and informational version '{3}'. TelemetryCorrelationId({4})",
                    ServiceBundle.PlatformProxy.GetProductName(),
                    MsalIdHelper.GetMsalVersion(),
                    AssemblyUtils.GetAssemblyFileVersionAttribute(),
                    AssemblyUtils.GetAssemblyInformationalVersion(),
                    requestContext.TelemetryCorrelationId));

            return(requestContext);
        }
        public void BrokerInteractiveRequest_CreateBrokerParametersTest()
        {
            using (var harness = CreateTestHarness())
            {
                // Arrange
                var parameters = harness.CreateAuthenticationRequestParameters(
                    TestConstants.AuthorityTestTenant,
                    TestConstants.s_scope,
                    new TokenCache(harness.ServiceBundle, false),
                    null,
                    TestConstants.s_extraQueryParams);

                AcquireTokenInteractiveParameters interactiveParameters = new AcquireTokenInteractiveParameters();

                // Act
                IBroker broker = harness.ServiceBundle.PlatformProxy.CreateBroker(null);
                BrokerInteractiveRequest brokerInteractiveRequest =
                    new BrokerInteractiveRequest(
                        parameters,
                        interactiveParameters,
                        harness.ServiceBundle,
                        null,
                        broker);

                brokerInteractiveRequest.CreateRequestParametersForBroker();

                // Assert
                Assert.AreEqual(11, brokerInteractiveRequest.BrokerPayload.Count);

                Assert.AreEqual(s_canonicalizedAuthority, brokerInteractiveRequest.BrokerPayload[BrokerParameter.Authority]);
                Assert.AreEqual(TestConstants.ScopeStr, brokerInteractiveRequest.BrokerPayload[BrokerParameter.Scope]);
                Assert.AreEqual(TestConstants.ClientId, brokerInteractiveRequest.BrokerPayload[BrokerParameter.ClientId]);

                Assert.IsFalse(string.IsNullOrEmpty(brokerInteractiveRequest.BrokerPayload[BrokerParameter.CorrelationId]));
                Assert.AreNotEqual(Guid.Empty.ToString(), brokerInteractiveRequest.BrokerPayload[BrokerParameter.CorrelationId]);
                Assert.AreEqual(MsalIdHelper.GetMsalVersion(), brokerInteractiveRequest.BrokerPayload[BrokerParameter.ClientVersion]);
                Assert.AreEqual("NO", brokerInteractiveRequest.BrokerPayload[BrokerParameter.Force]);
                Assert.AreEqual(string.Empty, brokerInteractiveRequest.BrokerPayload[BrokerParameter.Username]);

                Assert.AreEqual(TestConstants.RedirectUri, brokerInteractiveRequest.BrokerPayload[BrokerParameter.RedirectUri]);

                Assert.AreEqual(TestConstants.BrokerExtraQueryParameters, brokerInteractiveRequest.BrokerPayload[BrokerParameter.ExtraQp]);

                //Assert.AreEqual(TestConstants.BrokerClaims, brokerInteractiveRequest._brokerPayload[BrokerParameter.Claims]); //TODO
                Assert.AreEqual(BrokerParameter.OidcScopesValue, brokerInteractiveRequest.BrokerPayload[BrokerParameter.ExtraOidcScopes]);
            }
        }
        internal void CreateRequestParametersForBroker()
        {
            BrokerPayload.Add(BrokerParameter.Authority, _authenticationRequestParameters.Authority.AuthorityInfo.CanonicalAuthority);
            string scopes = EnumerableExtensions.AsSingleString(_authenticationRequestParameters.Scope);

            BrokerPayload.Add(BrokerParameter.Scope, scopes);
            BrokerPayload.Add(BrokerParameter.ClientId, _authenticationRequestParameters.ClientId);
            BrokerPayload.Add(BrokerParameter.CorrelationId, _authenticationRequestParameters.RequestContext.Logger.CorrelationId.ToString());
            BrokerPayload.Add(BrokerParameter.ClientVersion, MsalIdHelper.GetMsalVersion());
            BrokerPayload.Add(BrokerParameter.RedirectUri, _serviceBundle.Config.RedirectUri);
            string extraQP = string.Join("&", _authenticationRequestParameters.ExtraQueryParameters.Select(x => x.Key + "=" + x.Value));

            BrokerPayload.Add(BrokerParameter.ExtraQp, extraQP);
            BrokerPayload.Add(BrokerParameter.ExtraOidcScopes, BrokerParameter.OidcScopesValue);
            BrokerPayload.Add(BrokerParameter.LoginHint, _silentParameters.LoginHint);
#pragma warning disable CA1305 // Specify IFormatProvider
            BrokerPayload.Add(BrokerParameter.ForceRefresh, _silentParameters.ForceRefresh.ToString());
#pragma warning restore CA1305 // Specify IFormatProvider
        }
        private Dictionary <string, string> CreateAuthorizationRequestParameters(Uri redirectUriOverride = null)
        {
            SortedSet <string> unionScope = GetDecoratedScope(
                new SortedSet <string>(AuthenticationRequestParameters.Scope.Union(_extraScopesToConsent)));

            var authorizationRequestParameters = new Dictionary <string, string>
            {
                [OAuth2Parameter.Scope]        = unionScope.AsSingleString(),
                [OAuth2Parameter.ResponseType] = OAuth2ResponseType.Code,

                [OAuth2Parameter.ClientId]    = AuthenticationRequestParameters.ClientId,
                [OAuth2Parameter.RedirectUri] = redirectUriOverride?.OriginalString ?? AuthenticationRequestParameters.RedirectUri.OriginalString
            };

            if (!string.IsNullOrWhiteSpace(AuthenticationRequestParameters.Claims))
            {
                authorizationRequestParameters[OAuth2Parameter.Claims] = AuthenticationRequestParameters.Claims;
            }

            if (!string.IsNullOrWhiteSpace(_interactiveParameters.LoginHint))
            {
                authorizationRequestParameters[OAuth2Parameter.LoginHint] = _interactiveParameters.LoginHint;
            }

            if (AuthenticationRequestParameters.RequestContext?.Logger?.CorrelationId != Guid.Empty)
            {
                authorizationRequestParameters[OAuth2Parameter.CorrelationId] =
                    AuthenticationRequestParameters.RequestContext.Logger.CorrelationId.ToString();
            }

            foreach (KeyValuePair <string, string> kvp in MsalIdHelper.GetMsalIdParameters(AuthenticationRequestParameters.RequestContext.Logger))
            {
                authorizationRequestParameters[kvp.Key] = kvp.Value;
            }

            if (_interactiveParameters.Prompt.PromptValue != Prompt.NoPrompt.PromptValue)
            {
                authorizationRequestParameters[OAuth2Parameter.Prompt] = _interactiveParameters.Prompt.PromptValue;
            }

            return(authorizationRequestParameters);
        }
        internal void CreateRequestParametersForBroker()
        {
            BrokerPayload.Clear();
            BrokerPayload.Add(BrokerParameter.Authority, _authenticationRequestParameters.Authority.AuthorityInfo.CanonicalAuthority);
            string scopes = EnumerableExtensions.AsSingleString(_authenticationRequestParameters.Scope);

            BrokerPayload.Add(BrokerParameter.Scope, scopes);
            BrokerPayload.Add(BrokerParameter.ClientId, _authenticationRequestParameters.ClientId);
            BrokerPayload.Add(BrokerParameter.CorrelationId, _authenticationRequestParameters.RequestContext.Logger.CorrelationId.ToString());
            BrokerPayload.Add(BrokerParameter.ClientVersion, MsalIdHelper.GetMsalVersion());
            BrokerPayload.Add(BrokerParameter.Force, "NO");
            BrokerPayload.Add(BrokerParameter.RedirectUri, _serviceBundle.Config.RedirectUri);

            string extraQP = string.Join("&", _authenticationRequestParameters.ExtraQueryParameters.Select(x => x.Key + "=" + x.Value));

            BrokerPayload.Add(BrokerParameter.ExtraQp, extraQP);

            BrokerPayload.Add(BrokerParameter.Username, _authenticationRequestParameters.Account?.Username ?? string.Empty);
            BrokerPayload.Add(BrokerParameter.ExtraOidcScopes, BrokerParameter.OidcScopesValue);
        }
Beispiel #23
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="authority"></param>
        /// <param name="redirectUri"></param>
        /// <param name="validateAuthority"></param>
        protected ClientApplicationBase(string clientId, string authority, string redirectUri,
                                        bool validateAuthority)
        {
            ClientId = clientId;
            Authority authorityInstance = Internal.Instance.Authority.CreateAuthority(authority, validateAuthority);

            Authority         = authorityInstance.CanonicalAuthority;
            RedirectUri       = redirectUri;
            ValidateAuthority = validateAuthority;
            if (UserTokenCache != null)
            {
                UserTokenCache.ClientId = clientId;
            }

            RequestContext requestContext = new RequestContext(Guid.Empty, null);

            requestContext.Logger.Info(string.Format(CultureInfo.InvariantCulture,
                                                     "MSAL {0} with assembly version '{1}', file version '{2}' and informational version '{3}' is running...",
                                                     PlatformPlugin.PlatformInformation.GetProductName(), MsalIdHelper.GetMsalVersion(),
                                                     MsalIdHelper.GetAssemblyFileVersion(), MsalIdHelper.GetAssemblyInformationalVersion()));
        }
        private Dictionary <string, string> CreateAuthorizationRequestParameters()
        {
            SortedSet <string> unionScope =
                this.GetDecoratedScope(
                    new SortedSet <string>(AuthenticationRequestParameters.Scope.Union(this._additionalScope)));

            Dictionary <string, string> authorizationRequestParameters =
                new Dictionary <string, string>(AuthenticationRequestParameters.ClientKey.ToParameters());

            authorizationRequestParameters[OAuth2Parameter.Scope]        = unionScope.AsSingleString();
            authorizationRequestParameters[OAuth2Parameter.ResponseType] = OAuth2ResponseType.Code;

            if (!string.IsNullOrWhiteSpace(AuthenticationRequestParameters.Policy))
            {
                authorizationRequestParameters[OAuth2Parameter.Policy] = AuthenticationRequestParameters.Policy;
            }

            authorizationRequestParameters[OAuth2Parameter.RedirectUri] =
                AuthenticationRequestParameters.RedirectUri.AbsoluteUri;

            if (!string.IsNullOrWhiteSpace(AuthenticationRequestParameters.LoginHint))
            {
                authorizationRequestParameters[OAuth2Parameter.LoginHint] = AuthenticationRequestParameters.LoginHint;
            }

            if (this.CallState != null && !string.IsNullOrEmpty(CallState.CorrelationId))
            {
                authorizationRequestParameters[OAuth2Parameter.CorrelationId] = this.CallState.CorrelationId;
            }

            IDictionary <string, string> adalIdParameters = MsalIdHelper.GetMsalIdParameters();

            foreach (KeyValuePair <string, string> kvp in adalIdParameters)
            {
                authorizationRequestParameters[kvp.Key] = kvp.Value;
            }

            AddUiOptionToRequestParameters(authorizationRequestParameters);
            return(authorizationRequestParameters);
        }
Beispiel #25
0
        public void BrokerInteractiveRequest_CreateBrokerParametersTest()
        {
            using (var harness = CreateTestHarness())
            {
                // Arrange
                var parameters = harness.CreateAuthenticationRequestParameters(
                    MsalTestConstants.AuthorityTestTenant,
                    null,
                    null,
                    null,
                    MsalTestConstants.ExtraQueryParams);

                // Act
                BrokerInteractiveRequest brokerInteractiveRequest = new BrokerInteractiveRequest(parameters, null, null, null);
                brokerInteractiveRequest.CreateRequestParametersForBroker();

                // Assert
                Assert.AreEqual(10, brokerInteractiveRequest._brokerPayload.Count);

                Assert.AreEqual(CanonicalizedAuthority, brokerInteractiveRequest._brokerPayload[BrokerParameter.Authority]);
                Assert.AreEqual(MsalTestConstants.ScopeStr, brokerInteractiveRequest._brokerPayload[BrokerParameter.RequestScopes]);
                Assert.AreEqual(MsalTestConstants.ClientId, brokerInteractiveRequest._brokerPayload[BrokerParameter.ClientId]);

                Assert.IsFalse(String.IsNullOrEmpty(brokerInteractiveRequest._brokerPayload[BrokerParameter.CorrelationId]));
                Assert.AreNotEqual(Guid.Empty.ToString(), brokerInteractiveRequest._brokerPayload[BrokerParameter.CorrelationId]);
                Assert.AreEqual(MsalIdHelper.GetMsalVersion(), brokerInteractiveRequest._brokerPayload[BrokerParameter.ClientVersion]);
                Assert.AreEqual("NO", brokerInteractiveRequest._brokerPayload[BrokerParameter.Force]);
                Assert.AreEqual(string.Empty, brokerInteractiveRequest._brokerPayload[BrokerParameter.Username]);

                Assert.AreEqual(MsalTestConstants.RedirectUri, brokerInteractiveRequest._brokerPayload[BrokerParameter.RedirectUri]);

                Assert.AreEqual(MsalTestConstants.BrokerExtraQueryParameters, brokerInteractiveRequest._brokerPayload[BrokerParameter.ExtraQp]);

                //Assert.AreEqual(MsalTestConstants.BrokerClaims, brokerInteractiveRequest._brokerPayload[BrokerParameter.Claims]); //TODO
                Assert.AreEqual(BrokerParameter.OidcScopesValue, brokerInteractiveRequest._brokerPayload[BrokerParameter.ExtraOidcScopes]);
            }
        }
 public OAuth2Client(ICoreLogger logger, IHttpManager httpManager, ITelemetryManager telemetryManager)
 {
     _headers          = new Dictionary <string, string>(MsalIdHelper.GetMsalIdParameters(logger));
     _httpManager      = httpManager ?? throw new ArgumentNullException(nameof(httpManager));
     _telemetryManager = telemetryManager ?? throw new ArgumentNullException(nameof(telemetryManager));
 }
        public void MsalVersionRegexTest()
        {
            string msalVersion = MsalIdHelper.GetMsalVersion();

            Assert.IsNotNull(msalVersion);
        }