Ejemplo n.º 1
0
        /// <summary>
        /// Haalt een access token op bij de ZA
        /// </summary>
        /// <param name="gegevensdienst">De gegevensdienst waarvoor je de access token nodig hebt</param>
        /// <param name="authorizationCode">De authorization-code die je hebt ontvangen van de zorggebruiker</param>
        /// <param name="redirectUri">Dezelfde waarde als in de voorafgaande authorization request</param>
        /// <param name="httpClientFactory">Wordt gebruikt om een HTTP-verbinding met de ZA op te zetten</param>
        /// <param name="cancellationToken">Gebruik dit om de HTTP-request te annuleren</param>
        /// <returns>De access token om bij de patient gegevens op te kunnen halen</returns>
        public static async Task <string> GetAccessToken(
            IGegevensdienst gegevensdienst,
            string authorizationCode,
            string redirectUri,
            IHttpClientFactory httpClientFactory,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (gegevensdienst == null)
            {
                throw new ArgumentNullException(nameof(gegevensdienst));
            }

            if (authorizationCode == null)
            {
                throw new ArgumentNullException(nameof(authorizationCode));
            }

            if (redirectUri == null)
            {
                throw new ArgumentNullException(nameof(redirectUri));
            }

            if (httpClientFactory == null)
            {
                throw new ArgumentNullException(nameof(httpClientFactory));
            }

            var parms = new Dictionary <string, string>()
            {
                ["grant_type"]   = "authorization_code",
                ["code"]         = authorizationCode,
                ["client_id"]    = string.Empty,
                ["redirect_uri"] = redirectUri.ToString(),
            };

            var baseUri = gegevensdienst.TokenEndpointUri;
            var url     = new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), parms));

            using (var httpClient = httpClientFactory.CreateClient())
            {
                var res = await httpClient.PostAsync(url, null, cancellationToken : cancellationToken)
                          .ConfigureAwait(false);

                return(await res.Content.ReadAsStringAsync().ConfigureAwait(false));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Geeft een URL waarmee een zorggebruiker een authorization-code kan ophalen bij een zorgaanbieder
        /// </summary>
        /// <returns>De Uri waar de client gaat inloggen.</returns>
        /// <param name="gegevensdienst">De gegevensdienst waar de zorggebruiker gaat inloggen.</param>
        /// <param name="clientId">De clientId van deze PGO.</param>
        /// <param name="redirectUri">De url waar de client weer terugkomt met een authorization-code.</param>
        /// <param name="state">Applicatie-specifieke state. Gebruik dit om de client weer te herkennen bij terugkomst.</param>
        public static Uri MakeAuthUri(IGegevensdienst gegevensdienst, string clientId, string redirectUri, string state)
        {
            if (gegevensdienst == null)
            {
                throw new ArgumentNullException(nameof(gegevensdienst));
            }

            if (clientId == null)
            {
                throw new ArgumentNullException(nameof(clientId));
            }

            if (redirectUri == null)
            {
                throw new ArgumentNullException(nameof(redirectUri));
            }

            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }

            var baseUri = gegevensdienst.AuthorizationEndpointUri;
            var prefix  = gegevensdienst.Zorgaanbiedernaam.Replace("@medmij", string.Empty);
            var scope   = $"{prefix}~{gegevensdienst.Id}";
            var parms   = new Dictionary <string, string>()
            {
                ["response_type"] = "code",
                ["client_id"]     = clientId,
                ["redirect_uri"]  = redirectUri,
                ["scope"]         = scope,
                ["state"]         = state,
            };

            return(new Uri(QueryHelpers.AddQueryString(baseUri.ToString(), parms)));
        }