예제 #1
0
        public async Task When_Pass_IdTokenHint_And_The_Subject_Matches_The_Authenticated_User_Then_Token_Is_Returned()
        {
            // GENERATE JWS
            InitializeFakeObjects();
            _httpClientFactoryStub.Setup(h => h.GetHttpClient()).Returns(_server.Client);
            var payload = new JwsPayload
            {
                {
                    "sub", "administrator"
                }
            };

            payload.Add("aud", new[] { "http://localhost:5000" });
            var jws = _jwsGenerator.Generate(payload, JwsAlg.RS256, _server.SharedCtx.SignatureKey);
            var jwe = _jweGenerator.GenerateJwe(jws, JweAlg.RSA1_5, JweEnc.A128CBC_HS256, _server.SharedCtx.EncryptionKey);

            // ACT
            var result = await _authorizationClient.ResolveAsync(baseUrl + "/.well-known/openid-configuration",
                                                                 new AuthorizationRequest(new[] { "openid", "api1" }, new[] { ResponseTypes.Code }, "authcode_client", "http://localhost:5000/callback", "state")
            {
                IdTokenHint = jwe,
                Prompt      = "none"
            });

            // ASSERT
            Assert.NotNull(result);
            Assert.False(result.ContainsError);
        }
        public async Task <string> ExecuteAsync(CreateJweParameter createJweParameter)
        {
            if (createJweParameter == null)
            {
                throw new ArgumentNullException(nameof(createJweParameter));
            }

            if (string.IsNullOrWhiteSpace(createJweParameter.Url))
            {
                throw new ArgumentNullException(nameof(createJweParameter.Url));
            }

            if (string.IsNullOrWhiteSpace(createJweParameter.Jws))
            {
                throw new ArgumentNullException(nameof(createJweParameter.Jws));
            }

            if (string.IsNullOrWhiteSpace(createJweParameter.Kid))
            {
                throw new ArgumentNullException(nameof(createJweParameter.Kid));
            }

            Uri uri = null;

            if (!Uri.TryCreate(createJweParameter.Url, UriKind.Absolute, out uri))
            {
                throw new IdentityServerManagerException(
                          ErrorCodes.InvalidRequestCode,
                          string.Format(ErrorDescriptions.TheUrlIsNotWellFormed, createJweParameter.Url));
            }

            var jsonWebKey = await _jsonWebKeyHelper.GetJsonWebKey(createJweParameter.Kid, uri).ConfigureAwait(false);

            if (jsonWebKey == null)
            {
                throw new IdentityServerManagerException(
                          ErrorCodes.InvalidRequestCode,
                          string.Format(ErrorDescriptions.TheJsonWebKeyCannotBeFound, createJweParameter.Kid, uri.AbsoluteUri));
            }

            var result = string.Empty;

            if (!string.IsNullOrWhiteSpace(createJweParameter.Password))
            {
                result = _jweGenerator.GenerateJweByUsingSymmetricPassword(createJweParameter.Jws,
                                                                           createJweParameter.Alg,
                                                                           createJweParameter.Enc,
                                                                           jsonWebKey,
                                                                           createJweParameter.Password);
            }
            else
            {
                result = _jweGenerator.GenerateJwe(createJweParameter.Jws,
                                                   createJweParameter.Alg,
                                                   createJweParameter.Enc,
                                                   jsonWebKey);
            }

            return(result);
        }
예제 #3
0
        public async Task <string> EncryptAsync(string jwe, JweAlg jweAlg, JweEnc jweEnc)
        {
            var jsonWebKey = await GetJsonWebKey(
                jweAlg.ToAllAlg(),
                KeyOperations.Encrypt,
                Use.Enc);

            if (jsonWebKey == null)
            {
                return(jwe);
            }

            return(_jweGenerator.GenerateJwe(
                       jwe,
                       jweAlg,
                       jweEnc,
                       jsonWebKey));
        }