{"action":"created","comment":{"url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/comments/221356101","pull_request_review_id":159991417,"id":221356101,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMTM1NjEwMQ==","diff_hunk":"@@ -82,6 +88,200 @@ internal static bool CanCreateValidUri(string uriString, UriKind uriKind)\n             return Uri.TryCreate(uriString, uriKind, out Uri tempUri);\n         }\n \n+        private Saml2EncryptedAssertion EncryptAssertion(byte[] assertionData, EncryptingCredentials encryptingCredentials)\n+        {\n+            ValidateEncryptingCredentials(encryptingCredentials);\n+\n+            var encryptedAssertion = new Saml2EncryptedAssertion();\n+\n+            // SymmetricSecurityKey is provided:\n+            // Pre-shared symmetric key (session key) is used to encrypt an assertion\n+            // Session key will not be serialized, but KeyName will be set if available\n+            if (encryptingCredentials.Key is SymmetricSecurityKey)\n+            {\n+                encryptedAssertion.EncryptedData = CreateEncryptedDataHelper((SymmetricSecurityKey)encryptingCredentials.Key, encryptingCredentials.Enc, assertionData, encryptingCredentials);\n+                encryptedAssertion.EncryptedData.KeyInfo.KeyName = encryptingCredentials.Key.KeyId;\n+            }\n+            // AsymmetricSecurityKey is provided:\n+            // New session key will be created to encrypt an assertion\n+            // Session key will be wrapped with provided AsymmetricSecurityKey\n+            else if (encryptingCredentials.Key is AsymmetricSecurityKey)\n+            {\n+                SymmetricSecurityKey sessionKey = CreateSessionKeyBytes(encryptingCredentials.Enc);\n+\n+                // Create EncryptedData\n+                encryptedAssertion.EncryptedData = CreateEncryptedDataHelper(sessionKey, encryptingCredentials.Enc, assertionData, encryptingCredentials);\n+                // Set EncryptedData RetrievalMethodUri to ID of EncryptedKey\n+                encryptedAssertion.EncryptedData.KeyInfo.RetrievalMethodUri = encryptingCredentials.Key.KeyId;\n+\n+                // Create EncryptedKey\n+                encryptedAssertion.EncryptedKey = CreateEncryptedKeyHelper((AsymmetricSecurityKey)encryptingCredentials.Key, sessionKey, encryptingCredentials.Alg, encryptingCredentials);\n+                // Add reference from EncrypedKey to EncryptedData\n+                encryptedAssertion.EncryptedKey.AddReference(new DataReference(encryptedAssertion.EncryptedData.Id));\n+\n+                // Set Digest method for EncryptedKey\n+                if (SecurityAlgorithms.RsaOaepMgf1pKeyWrap.Equals(encryptingCredentials.Alg, StringComparison.Ordinal))\n+                    encryptedAssertion.EncryptedKey.EncryptionMethod.DigestMethod = SecurityAlgorithms.Sha1Digest;\n+\n+                // Set X509CertificateData\n+                if (encryptingCredentials.Key is X509SecurityKey)","path":"src/Microsoft.IdentityModel.Tokens.Saml/Saml2/Saml2Serializer.cs","position":65,"original_position":65,"commit_id":"3510bac9a877aed54b223b3acbd49e12d25d14dd","original_commit_id":"3510bac9a877aed54b223b3acbd49e12d25d14dd","user":{"login":"GeoK","id":1943561,"node_id":"MDQ6VXNlcjE5NDM1NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1943561?v=4","gravatar_id":"","url":"https://api.github.com/users/GeoK","html_url":"https://github.com/GeoK","followers_url":"https://api.github.com/users/GeoK/followers","following_url":"https://api.github.com/users/GeoK/following{/other_user}","gists_url":"https://api.github.com/users/GeoK/gists{/gist_id}","starred_url":"https://api.github.com/users/GeoK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GeoK/subscriptions","organizations_url":"https://api.github.com/users/GeoK/orgs","repos_url":"https://api.github.com/users/GeoK/repos","events_url":"https://api.github.com/users/GeoK/events{/privacy}","received_events_url":"https://api.github.com/users/GeoK/received_events","type":"User","site_admin":false},"body":"this element is optional, but it's might be useful when when users are providing custom KeyResolving logic using TokenDecryptionKeyResolver delegate.\r\nCurrent implementation is relying on using TokenDecryptionKey (set on TokenValidationParams) to decrypt an assertion, if TokenDecryptionKeyResolver delegate is not set. \r\n","created_at":"2018-09-28T19:18:52Z","updated_at":"2018-09-28T19:18:53Z","html_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025#discussion_r221356101","pull_request_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/comments/221356101"},"html":{"href":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025#discussion_r221356101"},"pull_request":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025"}},"in_reply_to_id":221100229},"pull_request":{"url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025","id":218165947,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE4MTY1OTQ3","html_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025","diff_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025.diff","patch_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025.patch","issue_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/1025","number":1025,"state":"open","locked":false,"title":"Saml2EncryptedAssertion","user":{"login":"GeoK","id":1943561,"node_id":"MDQ6VXNlcjE5NDM1NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1943561?v=4","gravatar_id":"","url":"https://api.github.com/users/GeoK","html_url":"https://github.com/GeoK","followers_url":"https://api.github.com/users/GeoK/followers","following_url":"https://api.github.com/users/GeoK/following{/other_user}","gists_url":"https://api.github.com/users/GeoK/gists{/gist_id}","starred_url":"https://api.github.com/users/GeoK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GeoK/subscriptions","organizations_url":"https://api.github.com/users/GeoK/orgs","repos_url":"https://api.github.com/users/GeoK/repos","events_url":"https://api.github.com/users/GeoK/events{/privacy}","received_events_url":"https://api.github.com/users/GeoK/received_events","type":"User","site_admin":false},"body":"### Key Point:\r\nAES-GCM is still not supported by System.Security.Cryptography. Therefore using IdentityModel extensions project to Encrypt/Decrypt a Saml2 Assertion, using an AES-GCM algorithm, will result with an exception. One should override CryptoProviderFactory and AuthenticationEncryptionProvider (similar to the ones developed for test) in order to use existing logic to Encrypt/Decrypt a Saml2 Assertion (using an AES-GCM algorithm). \r\n### Summary:\r\nSaml2 tokens can have encrypted assertions. The goal of this PR is to enable basic support for encrypting and decrypting a Saml2Assertion, based on the latest xml enc standard, using modern authenticated encryption mechanism ([AES-GCM](http://www.w3.org/2009/xmlenc11#aes128-gcm)) and key wrap (transport) mechanism ([RSA-OAEP-MGF1P](http://www.w3.org/TR/xmlenc-core/#sec-RSA-OAEP)), and without introducing any breaking changes to the current project infrastructure.\r\n\r\nThe following scenarios are supported:\r\n1) Encryption using a pre-shared symmetric key (session key)  to encrypt an assertion: Session key will not be serialized and Relying Party must be able to locally determine the decryption key.\r\n\t\r\n2) New session key will be created to encrypt an assertion and session key will be wrapped using a provided asymmetric public-key (X.509 certificate).\r\n\t\r\n### Saml2EncryptedAssertion support (basic profile):\r\n\r\n* When an assertion is to be signed and encrypted, the following rules apply. A relying party MUST perform signature validation and decryption in the reverse order that signing and encryption were performed. When a signed <Assertion> element is encrypted, the signature MUST first be calculated and placed within the <Assertion> element before the element is encrypted. \r\n* The following authenticated encryption algorithms are supported: [AES128-GCM](http://www.w3.org/2009/xmlenc11#aes128-gcm), [AES192-GCM](http://www.w3.org/2009/xmlenc11#aes192-gcm), and [AES256-GCM](http://www.w3.org/2009/xmlenc11#aes256-gcm)\r\n* The following key-wrap algorithms is supported: [RSA-OAEP-MGF1P](http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p)\r\n* EncryptionMethod element is treated as required as there is no support for users to provide an encryption algorithm.\r\n* If an encrypted key is NOT included in the XML instance, then the relying party must be able to locally determine the decryption key.\r\n* EncryptedKey element (if available) must be next to associated EncryptedData element, within the enclosing Saml parent element. EncryptedKey element embedded in EncryptedData element is not currently supported.\r\n* If the encrypted key is included in the XML instance, then it SHOULD be referenced within the associated <xenc:EncryptedData> element. When an <xenc:EncryptedKey> element is used, the <ds:KeyInfo> element within <xenc:EncryptedData> SHOULD reference the <xenc:EncryptedKey> element using a <ds:RetrievalMethod> element of Type http://www.w3.org/2001/04/xmlenc#EncryptedKey. In addition, an <xenc:EncryptedKey> element SHOULD contain an <xenc:ReferenceList> element containing a <xenc:DataReference> that references the corresponding <xenc:EncryptedData> element(s) that the key was used to encrypt. \r\n* CarriedKeyName (multicast) is not supported.\r\n* Encoding attribute of EncryptedType is always set to base64 and MimeType attribute is ignored.\r\n\r\n ### Implementation notes:\r\n\r\n* Current Saml2 project infrastructure is leverage to seamlessly include support for Saml2EncryptedAssertion, without introducing any breaking changes. \r\n* Saml2Assertion is enriched with a public bool property Encrypted which indicates if the assertion is Encrypted or not. In case when the assertion is encrypted, public string property EncryptedAssertion will be populated with raw assertion data. Any GET operation on encrypted Saml2Assertion will result with a corresponding exception being throw.\r\n* In order to encrypt a Saml2Assertion, one needs to set EncryptingCredentials on SecurityTokenDescriptor, while creating a Saml2SecurityToken. In case when EncryptingCredentials key is an asymmetric security key, an assertion will be encrypted using a new session key (and encryption algorithm) that will be wrapped using a provided asymmetric key and an algorithm. In case when EncryptingCredentials key is a symmetric security key, an assertion will be encrypted using a pre-shared symmetric key (session key) and a provided encryption algorithm.\r\n* In order to decrypt a Saml2EncryptedAssertion, one needs to set TokenDecryptionKey or TokenDecryptionKeyResolver delegate on TokenValidationParamaters when calling ValidateToken method.  \r\n* New classes are added under Microsoft.IdentityModel.Xml project to support XML encryption data types used for Saml2EncryptedAssertion encryption operations.\r\n* KeyInfo class was not fully refactored to support KeyInfo clauses as that would lead to a breaking change.\r\n* Saml2EncryptedAssertion related logic is mostly concentrated in Saml2Serializer class.\r\n\r\nResolves: #734 ","created_at":"2018-09-26T01:43:18Z","updated_at":"2018-09-28T19:18:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"191e04c7db316a6b8e9b355f6bbce275bdeacf78","assignee":null,"assignees":[],"requested_reviewers":[{"login":"brentschmaltz","id":3172421,"node_id":"MDQ6VXNlcjMxNzI0MjE=","avatar_url":"https://avatars0.githubusercontent.com/u/3172421?v=4","gravatar_id":"","url":"https://api.github.com/users/brentschmaltz","html_url":"https://github.com/brentschmaltz","followers_url":"https://api.github.com/users/brentschmaltz/followers","following_url":"https://api.github.com/users/brentschmaltz/following{/other_user}","gists_url":"https://api.github.com/users/brentschmaltz/gists{/gist_id}","starred_url":"https://api.github.com/users/brentschmaltz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brentschmaltz/subscriptions","organizations_url":"https://api.github.com/users/brentschmaltz/orgs","repos_url":"https://api.github.com/users/brentschmaltz/repos","events_url":"https://api.github.com/users/brentschmaltz/events{/privacy}","received_events_url":"https://api.github.com/users/brentschmaltz/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":84550465,"node_id":"MDU6TGFiZWw4NDU1MDQ2NQ==","url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/labels/Enhancement","name":"Enhancement","color":"eb6420","default":false},{"id":390287913,"node_id":"MDU6TGFiZWwzOTAyODc5MTM=","url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/labels/PR%20Submitted","name":"PR Submitted","color":"006b75","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025/commits","review_comments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025/comments","review_comment_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/1025/comments","statuses_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/statuses/3510bac9a877aed54b223b3acbd49e12d25d14dd","head":{"label":"AzureAD:geok/Saml2EncryptedAssertion","ref":"geok/Saml2EncryptedAssertion","sha":"3510bac9a877aed54b223b3acbd49e12d25d14dd","user":{"login":"AzureAD","id":2966316,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjYzMTY=","avatar_url":"https://avatars1.githubusercontent.com/u/2966316?v=4","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"repo":{"id":17496194,"node_id":"MDEwOlJlcG9zaXRvcnkxNzQ5NjE5NA==","name":"azure-activedirectory-identitymodel-extensions-for-dotnet","full_name":"AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","private":false,"owner":{"login":"AzureAD","id":2966316,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjYzMTY=","avatar_url":"https://avatars1.githubusercontent.com/u/2966316?v=4","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","description":"IdentityModel extensions for .Net","fork":false,"url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","forks_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/forks","keys_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/teams","hooks_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/hooks","issue_events_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/events{/number}","events_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/events","assignees_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/assignees{/user}","branches_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/branches{/branch}","tags_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/tags","blobs_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/statuses/{sha}","languages_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/languages","stargazers_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/stargazers","contributors_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/contributors","subscribers_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/subscribers","subscription_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/subscription","commits_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/contents/{+path}","compare_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/merges","archive_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/downloads","issues_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues{/number}","pulls_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls{/number}","milestones_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/milestones{/number}","notifications_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/labels{/name}","releases_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/releases{/id}","deployments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/deployments","created_at":"2014-03-06T23:18:05Z","updated_at":"2018-09-28T02:48:28Z","pushed_at":"2018-09-27T22:12:54Z","git_url":"git://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","ssh_url":"git@github.com:AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","clone_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","svn_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","homepage":"","size":9773,"stargazers_count":420,"watchers_count":420,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":157,"mirror_url":null,"archived":false,"open_issues_count":44,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":157,"open_issues":44,"watchers":420,"default_branch":"dev"}},"base":{"label":"AzureAD:dev","ref":"dev","sha":"dd950b796da7dfb608cc09bd0bd6ad2b4f00bd3c","user":{"login":"AzureAD","id":2966316,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjYzMTY=","avatar_url":"https://avatars1.githubusercontent.com/u/2966316?v=4","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"repo":{"id":17496194,"node_id":"MDEwOlJlcG9zaXRvcnkxNzQ5NjE5NA==","name":"azure-activedirectory-identitymodel-extensions-for-dotnet","full_name":"AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","private":false,"owner":{"login":"AzureAD","id":2966316,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjYzMTY=","avatar_url":"https://avatars1.githubusercontent.com/u/2966316?v=4","gravatar_id":"","url":"https://api.github.com/users/AzureAD","html_url":"https://github.com/AzureAD","followers_url":"https://api.github.com/users/AzureAD/followers","following_url":"https://api.github.com/users/AzureAD/following{/other_user}","gists_url":"https://api.github.com/users/AzureAD/gists{/gist_id}","starred_url":"https://api.github.com/users/AzureAD/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AzureAD/subscriptions","organizations_url":"https://api.github.com/users/AzureAD/orgs","repos_url":"https://api.github.com/users/AzureAD/repos","events_url":"https://api.github.com/users/AzureAD/events{/privacy}","received_events_url":"https://api.github.com/users/AzureAD/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","description":"IdentityModel extensions for .Net","fork":false,"url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","forks_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/forks","keys_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/teams","hooks_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/hooks","issue_events_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/events{/number}","events_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/events","assignees_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/assignees{/user}","branches_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/branches{/branch}","tags_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/tags","blobs_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/statuses/{sha}","languages_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/languages","stargazers_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/stargazers","contributors_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/contributors","subscribers_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/subscribers","subscription_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/subscription","commits_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/contents/{+path}","compare_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/merges","archive_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/downloads","issues_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues{/number}","pulls_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls{/number}","milestones_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/milestones{/number}","notifications_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/labels{/name}","releases_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/releases{/id}","deployments_url":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/deployments","created_at":"2014-03-06T23:18:05Z","updated_at":"2018-09-28T02:48:28Z","pushed_at":"2018-09-27T22:12:54Z","git_url":"git://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","ssh_url":"git@github.com:AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","clone_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet.git","svn_url":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet","homepage":"","size":9773,"stargazers_count":420,"watchers_count":420,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":157,"mirror_url":null,"archived":false,"open_issues_count":44,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":157,"open_issues":44,"watchers":420,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025"},"html":{"href":"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1025"},"issue":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/1025"},"comments":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/1025/comments"},"review_comments":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025/comments"},"review_comment":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pulls/1025/commits"},"statuses":{"href":"https://api.github.com/repos/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/statuses/3510bac9a877aed54b223b3acbd49e12d25d14dd"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"GeoK"}}