From 1b89476500aacc500feddfd3a0ea3f53fcf2cb61 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Wed, 29 Jul 2020 13:11:22 -0700 Subject: [PATCH] --- Bin/Microsoft.IdentityModel.JsonWebTokens.dll | Bin 0 -> 58584 bytes ...ft.IdentityModel.JsonWebTokens.dll.refresh | Bin 0 -> 298 bytes Bin/Microsoft.IdentityModel.JsonWebTokens.xml | 736 ++++ Bin/Microsoft.IdentityModel.Logging.dll | Bin 0 -> 32272 bytes ...icrosoft.IdentityModel.Logging.dll.refresh | Bin 0 -> 274 bytes Bin/Microsoft.IdentityModel.Logging.xml | 398 ++ Bin/Microsoft.IdentityModel.Tokens.dll | Bin 0 -> 156368 bytes ...Microsoft.IdentityModel.Tokens.dll.refresh | Bin 0 -> 270 bytes Bin/Microsoft.IdentityModel.Tokens.xml | 3367 +++++++++++++++++ Bin/Microsoft.Owin.xml | 3316 ++++++++++++++++ 10 files changed, 7817 insertions(+) create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.dll create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.xml create mode 100644 Bin/Microsoft.IdentityModel.Logging.dll create mode 100644 Bin/Microsoft.IdentityModel.Logging.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.Logging.xml create mode 100644 Bin/Microsoft.IdentityModel.Tokens.dll create mode 100644 Bin/Microsoft.IdentityModel.Tokens.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.Tokens.xml create mode 100644 Bin/Microsoft.Owin.xml diff --git a/Bin/Microsoft.IdentityModel.JsonWebTokens.dll b/Bin/Microsoft.IdentityModel.JsonWebTokens.dll new file mode 100644 index 0000000000000000000000000000000000000000..1c17c5a22fbd8f7978ae2e0170940dcb10f30954 GIT binary patch literal 58584 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 M_qGjnkC^xW0~EF#ivR!s literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh b/Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..db176b08bab9460ed157a9297796328a8e5cfa2b GIT binary patch literal 298 zcmb`DK?=e!5JmrqM9_k`?MlI&;wB)PMhy*3G3~<3t1oi~2{RM^e=`&E{j}Q3>7=5d z7ul)RRkJ!pB~C^u}^xao+~8(Z)iVnr + + + Microsoft.IdentityModel.JsonWebTokens + + + + + Constants for Json Web tokens. + + + + + A URI that represents the JSON XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON array XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON null data type + + When mapping json to .Net Claim(s), we use empty string to represent the claim value and set the ClaimValueType to JsonNull + + + + A designed for representing a JSON Web Token (JWT). + + + + + Initializes a new instance of from a string in JWS or JWE Compact serialized format. + + A JSON Web Token that has been serialized in JWS or JWE Compact serialized format. + 'jwtEncodedString' is null or empty. + 'jwtEncodedString' is not in JWS or JWE Compact serialization format. + + The contents of the returned have not been validated, the JSON Web Token is simply decoded. Validation can be accomplished using the validation methods in + + + + + Initializes a new instance of the class where the header contains the crypto algorithms applied to the encoded header and payload. + + A string containing JSON which represents the cryptographic operations applied to the JWT and optionally any additional properties of the JWT. + A string containing JSON which represents the claims contained in the JWT. Each claim is a JSON object of the form { Name, Value }. + 'header' is null. + 'payload' is null. + + + + Gets the 'value' of the 'actort' claim { actort, 'value' }. + + If the 'actort' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'alg' claim { alg, 'value' }. + + If the 'alg' claim is not found, an empty string is returned. + + + + Gets the list of 'aud' claim { aud, 'value' }. + + If the 'aud' claim is not found, enumeration will be empty. + + + + Gets the AuthenticationTag from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the Ciphertext from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets a for each JSON { name, value }. + + + + + Gets the 'value' of the 'cty' claim { cty, 'value' }. + + If the 'cty' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'enc' claim { enc, 'value' }. + + If the 'enc' value is not found, an empty string is returned. + + + + Gets the EncryptedKey from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Represents the cryptographic operations applied to the JWT and optionally any additional properties of the JWT. + + + + + Gets the 'value' of the 'jti' claim { jti, ''value' }. + + If the 'jti' claim is not found, an empty string is returned. + + + + Gets the InitializationVector from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the associated with this instance. + + + + + Gets the 'value' of the 'iat' claim { iat, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'iat' claim is not found, then is returned. + + + + Gets the 'value' of the 'iss' claim { iss, 'value' }. + + If the 'iss' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'kid' claim { kid, 'value' }. + + If the 'kid' claim is not found, an empty string is returned. + + + + Represents the JSON payload. + + + + + Gets the EncodedHeader from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the EncodedPayload from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the EncodedSignature from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the original raw data of this instance when it was created. + + + + + Not implemented. + + + + + Not implemented. + + + + + Gets the 'value' of the 'sub' claim { sub, 'value' }. + + If the 'sub' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'typ' claim { typ, 'value' }. + + If the 'typ' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'nbf' claim { nbf, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'nbf' claim is not found, then is returned. + + + + Gets the 'value' of the 'exp' claim { exp, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'exp' claim is not found, then is returned. + + + + Gets the 'value' of the 'x5t' claim { x5t, 'value' }. + + If the 'x5t' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'zip' claim { zip, 'value' }. + + If the 'zip' claim is not found, an empty string is returned. + + + + Decodes the string into the header, payload and signature. + + the tokenized string. + the original token. + + + + Decodes the payload and signature from the JWE parts. + + Parts of the JWE including the header. + Assumes Header has already been set. + + + + Decodes the payload and signature from the JWS parts. + + Parts of the JWS including the header. + Assumes Header has already been set. + + + + Gets the 'value' corresponding to the provided key from the JWT payload { key, 'value' }. + + If the key has no corresponding value, returns null. + + + + Gets the 'value' corresponding to the provided key from the JWT header { key, 'value' }. + + If the key has no corresponding value, returns null. + + + + A designed for creating and validating Json Web Tokens. + See: http://tools.ietf.org/html/rfc7519 and http://www.rfc-editor.org/info/rfc7515. + + + + + Gets the type of the . + + The type of + + + + Determines if the string is a well formed Json Web Token (JWT). + see: http://tools.ietf.org/html/rfc7519 + + String that should represent a valid JWT. + Uses matching: + JWS: @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (dir): @"^[A-Za-z0-9-_]+\.\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (wrappedkey): @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]$" + + + 'false' if the token is null or whitespace. + 'false' if token.Length is greater than . + 'true' if the token is in JSON compact serialization format. + + + + + Returns a value that indicates if this handler can validate a . + + 'true', indicating this instance can validate a . + + + + Creates a JWS (Json Web Signature). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWS. + A JWS in Compact Serialization Format. + + + + Creates a JWE (Json Web Encryption). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWT. + Defines the security key and algorithm that will be used to encrypt the JWT. + A JWE in compact serialization format. + + + + Creates a JWE (Json Web Encryption). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWT. + Defines the security key and algorithm that will be used to encrypt the JWT. + Defines the compression algorithm that will be used to compress the JWT token payload. + A JWE in compact serialization format. + + + + Compress a JWT token string. + + + + if 'token' is null. + if 'algorithm' is null. + if the compression algorithm is not supported. + Compressed JWT token bytes. + + + + Decompress JWT token bytes. + + + + if 'tokenBytes' is null. + if 'algorithm' is null. + if the decompression algorithm is not supported. + Decompressed JWT token + + + + Decrypts a JWE and returns the clear text + + the JWE that contains the cypher text. + contains crypto material. + the decoded / cleartext contents of the JWE. + if 'jwtToken' is null. + if 'validationParameters' is null. + if 'jwtToken.Enc' is null or empty. + if decompression failed. + if 'jwtToken.Kid' is not null AND decryption fails. + if the JWE was not able to be decrypted. + + + + Returns a to use when validating the signature of a token. + + The that is being validated. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Returns a to use when decrypting a JWE. + + The the token that is being decrypted. + The that is being decrypted. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' is greater than . + If the 'token' is in JWE Compact Serialization format, only the protected header will be deserialized. + This method is unable to decrypt the payload. Use to obtain the payload. + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' is greater than . + + + + Validates a JWS or a JWE. + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A required for validation. + A + + + + Validates the JWT signature. + + + + + Obtains a and validates the signature. + + Bytes to validate. + Signature to compare against. + to use. + Crypto algorithm to use. + Priority will be given to over . + 'true' if signature is valid. + + + + Constants for Json Web Tokens. + + + + + Short header type. + + + + + Long header type. + + + + + Short token type. + + + + + Long token type. + + + + + JWS - Token format: 'header.payload.signature'. Signature is optional, but '.' is required. + + + + + JWE - Token format: 'protectedheader.encryptedkey.iv.cyphertext.authenticationtag'. + + + + + The number of parts in a JWE token. + + + + + The number of parts in a JWS token. + + + + + The maximum number of parts in a JWT. + + + + + JWE header alg indicating a shared symmetric key is directly used as CEK. + + + + + List of header parameter names see: http://tools.ietf.org/html/rfc7519#section-5. + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.10 + also:https://tools.ietf.org/html/rfc7519#section-5.2 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7518#section-4.7.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.3 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.4 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.9 + also:https://tools.ietf.org/html/rfc7519#section-5.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.6 + + + + + see:https://tools.ietf.org/html/rfc7515#page-12 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.5 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.3 + + + + + List of registered claims from different sources + http://tools.ietf.org/html/rfc7519#section-4 + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-frontchannel-1_0.html#OPLogout + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + A class which contains useful methods for processing JWT tokens. + + + + + Regex that is used to figure out if a token is in JWS format. + + + + + Regex that is used to figure out if a token is in JWE format. + + + + + Produces a signature over the 'input'. + + String to be signed + The that contain crypto specs used to sign the token. + The bse64urlendcoded signature over the bytes obtained from UTF8Encoding.GetBytes( 'input' ). + 'input' or 'signingCredentials' is null. + + + + Generates key bytes. + + + + + Gets all decryption keys. + + + + + Gets the DateTime using the number of seconds from 1970-01-01T0:0:0Z (UTC) + + Claim in the payload that should map to an integer, float, or string. + The payload that contains the desired claim value. + If the claim is not found, the function returns: DateTime.MinValue + + If the value of the claim cannot be parsed into a long. + The DateTime representation of a claim. + + + + Log messages and codes + + + + + A class which contains the result of a token validation operation. + + + + + The validated security token. + + + + diff --git a/Bin/Microsoft.IdentityModel.Logging.dll b/Bin/Microsoft.IdentityModel.Logging.dll new file mode 100644 index 0000000000000000000000000000000000000000..60646a6da4241b4aff351d1b445db26132882e18 GIT binary patch literal 32272 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 literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Logging.xml b/Bin/Microsoft.IdentityModel.Logging.xml new file mode 100644 index 000000000..2b45eddf6 --- /dev/null +++ b/Bin/Microsoft.IdentityModel.Logging.xml @@ -0,0 +1,398 @@ + + + + Microsoft.IdentityModel.Logging + + + + + Event source based logger to log different events. + + + + + Static logger that is exposed externally. An external application or framework can hook up a listener to this event source to log data in a custom way. + + + + + Flag which indicates whether or not PII is shown in logs. False by default. + + + + + String that is used in place of any arguments to log messages if the 'ShowPII' flag is set to false. + + + + + Indicates whether or the log message header (contains library version, date/time, and PII debugging information) has been written. + + + + + The log message that indicates the current library version. + + + + + The log message that indicates the date. + + + + + The log message that is shown when PII is off. + + + + + The log message that is shown when PII is off. + + + + + Writes an event log by using the provided string argument and current UTC time. + No level filtering is done on the event. + + The log message. + No level filtering. + + + + Writes an event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a verbose event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a verbose event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an information event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes an information event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a warning event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a warning event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an error event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes an error event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a critical event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a critical event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an exception log by using the provided event identifer, exception argument, string argument and current UTC time. + + + + The log message. + + + + Writes an exception log by using the provided event identifer, exception argument, string argument, arguments list and current UTC time. + + + + The log message. + An object array that contains zero or more objects to format. + + + + Minimum log level to log events. Default is Warning. + + + + + Helper class for logging. + + + + + Logs an exception using the event source logger and returns new exception. + + argument that is null or empty. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + message to log. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + message to log. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + the inner to be added to the outer exception. + message to log. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + message to log. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + message to log. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + message to log. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + the inner to be added to the outer exception. + message to log. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + message to log. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger. + + The exception to log. + + + + Logs an exception using the event source logger. + + Identifies the level of an event to be logged. + The exception to log. + + + + Logs an information event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs a verbose event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs a warning event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Formats the string using InvariantCulture + + Format string. + Format arguments. + Formatted string. + + + + Log messages and codes for Microsoft.IdentityModel.Logging + + + + + Event listener that writes logs to a file or a fileStream provided by user. + + + + + Name of the default log file, excluding its path. + + + + + Initializes a new instance of that writes logs to text file. + + + + + Initializes a new instance of that writes logs to text file. + + location of the file where log messages will be written. + + + + Initializes a new instance of that writes logs to text file. + + StreamWriter where logs will be written. + + + + Called whenever an event has been written by an event source for which the event listener has enabled events. + + + + + + Releases all resources used by the current instance of the class. + + + + diff --git a/Bin/Microsoft.IdentityModel.Tokens.dll b/Bin/Microsoft.IdentityModel.Tokens.dll new file mode 100644 index 0000000000000000000000000000000000000000..67cef9cb9cbe2196adb787057235eb73d25a37d2 GIT binary patch literal 156368 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 C;PvMK literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Tokens.dll.refresh b/Bin/Microsoft.IdentityModel.Tokens.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..12542a8e9a5a6a9fcaafce3c0714996be093e883 GIT binary patch literal 270 zcmbu4OA5k35JcaJM9_e^&B}#4-33G^QA0u!%w*x^)i-km8TvC-)m`-WQ?jSx%uK_} zTv2jmp{AwxjUuyokqv4pYr`axw22Sud!8AIT-Z^_Orn9#{7|2?M>hti)8xpV$clqL n4TF7ayw!{u>E%xLU1n#0g|RW#*|p_n9b_Zh?DyaHI^X&OIuSJ0 literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Tokens.xml b/Bin/Microsoft.IdentityModel.Tokens.xml new file mode 100644 index 000000000..531569363 --- /dev/null +++ b/Bin/Microsoft.IdentityModel.Tokens.xml @@ -0,0 +1,3367 @@ + + + + Microsoft.IdentityModel.Tokens + + + + + This adapter abstracts the 'RSA' differences between versions of .Net targets. + + + + + Calls and + + + + + The following code determines if RSACng is available on the .Net framework that is installed. + + + + + Base class for a Security Key that contains Asymmetric key material. + + + + + This must be overridden to get a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets the status of the private key. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Enum for the existence of private key + + + + + private key exists for sure + + + + + private key doesn't exist for sure + + + + + unable to determine the existence of private key + + + + + Provides signature and verification operations for Asymmetric Algorithms using a . + + + + + Mapping from algorithm to minimum .KeySize when creating signatures. + + + + + Mapping from algorithm to minimum .KeySize when verifying signatures. + + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + If this is required to create signatures then set this to true. + + Creating signatures requires that the has access to a private key. + Verifying signatures (the default), does not require access to the private key. + + is null. + is null or empty. + is true and there is no private key. + If and algorithm pair are not supported. + + willCreateSignatures is true and .KeySize is less than the size corresponding to the given algorithm in . + + + .KeySize is less than the size corresponding to the algorithm in . Note: this is always checked. + + If the runtime is unable to create a suitable cryptographic provider. + + + + Gets the mapping from algorithm to the minimum .KeySize for creating signatures. + + + + + Gets the mapping from algorithm to the minimum .KeySize for verifying signatures. + + + + + Creating a Signature requires the use of a . + This method returns the type of the HashAlgorithm (as a string) + that describes the to use when generating a Signature. + + The SignatureAlgorithm in use. + if is null or whitespace. + if is not supported. + + + + This method is here, just to keep the #if out of the constructor. + + + + + + + + + Produces a signature over the 'input' using the and algorithm passed to . + + The bytes to be signed. + A signature over the input. + if is null. + if .Length == 0. + If has been called. + Sign is thread safe. + + + + Validates that an asymmetric key size is of sufficient size for a SignatureAlgorithm. + + The asymmetric key to validate. + Algorithm for which this key will be used. + Whether they key will be used for creating signatures. + if is null. + if is null or empty. + if .KeySize is less than the minimum + acceptable size. + + for minimum signing sizes. + for minimum verifying sizes. + + + + + Verifies that the over using the + and specified by this + are consistent. + + The bytes to generate the signature over. + The value to verify against. + true if signature matches, false otherwise. + is null or has length == 0. + is null or has length == 0. + If has been called. + Verify is thread safe. + + + + Calls to release managed resources. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Encodes and Decodes strings as Base64Url encoding. + + + + + The following functions perform base64url encoding which differs from regular base64 encoding as follows + * padding is skipped so the pad character '=' doesn't have to be percent encoded + * the 62nd and 63rd regular base64 encoding characters ('+' and '/') are replace with ('-' and '_') + The changes make the encoding alphabet file and URL safe. + + string to encode. + Base64Url encoding of the UTF8 bytes. + + + + Converts a subset of an array of 8-bit unsigned integers to its equivalent string representation that is encoded with base-64-url digits. Parameters specify + the subset as an offset in the input array, and the number of elements in the array to convert. + + An array of 8-bit unsigned integers. + An offset in inArray. + The number of elements of inArray to convert. + The string representation in base 64 url encodingof length elements of inArray, starting at position offset. + 'inArray' is null. + offset or length is negative OR offset plus length is greater than the length of inArray. + + + + Converts a subset of an array of 8-bit unsigned integers to its equivalent string representation that is encoded with base-64-url digits. Parameters specify + the subset as an offset in the input array, and the number of elements in the array to convert. + + An array of 8-bit unsigned integers. + The string representation in base 64 url encodingof length elements of inArray, starting at position offset. + 'inArray' is null. + offset or length is negative OR offset plus length is greater than the length of inArray. + + + + Converts the specified string, which encodes binary data as base-64-url digits, to an equivalent 8-bit unsigned integer array. + base64Url encoded string. + UTF8 bytes. + + + + Decodes the string from Base64UrlEncoded to UTF8. + + string to decode. + UTF8 string. + + + + Constants for compression algorithms. + + + + + Compression provider factory for compression and decompression. + + + + + Static constructor that initializes the default . + + + + + Default constructor for . + + + + + Constructor that creates a deep copy of given object. + + to copy from. + + + + Returns the default instance. + + + + + Extensibility point for custom compression support application wide. + + + + + Answers if an algorithm is supported. + + the name of the crypto algorithm. + true if the algorithm is supported, false otherwise. + + + + Returns a for a specific algorithm. + + the decompression algorithm. + a . + + + + Definition of cache for crypto providers + + + + + Returns the cache key to use when looking up an entry into the cache for a + + the to create the key for. + the cache key to use for finding a . + + + + Returns the 'key' that will be used to find a crypto provider in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + the cache key to use for finding a crypto provider. + + + + Trys to adds a to this cache. + + to cache. + true if the was added, false if the cache already contained the + + + + Trys to find a in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + a bool to indicate if the will be used to sign. + the if found. + true if a was found, false otherwise. + + + + Trys to remove a from this cache. + + to remove. + true if the was removed, false if the was not found. + + + + Creates cryptographic operators by specifying a 's and algorithms. + + + + + Returns the default instance. + + + + + Gets or sets the default value for caching + + + + + Static constructor that initializes the default . + + + + + Default constructor for . + + + + + Constructor that creates a deep copy of given object. + + to copy from. + + + + Gets the + + + + + Extensibility point for creating custom cryptographic operators. + + By default, if set, will be called before creating cryptographic operators. + If true is returned, then will be called. The will throw if the + Cryptographic operator returned is not of the correct type. + + + + Gets or sets a bool controlling if should be cached. + + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + 'key' is not a . + 'algorithm, key' pair is not supported. + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + + When finished with the call . + + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + + When finished with the call . + + + + + Creates a that supports the and algorithm. + + The to use for signing. + The algorithm to use for signing. + 'key' is null. + 'algorithm' is null or empty. + ' is too small. + is too small. + is not a or a . + + AsymmetricSignatureProviders require access to a PrivateKey for Signing. + When finished with the call . + + + + + Returns a instance supports the and algorithm. + + The to use for signing. + The algorithm to use for verifying. + 'key' is null. + 'algorithm' is null or empty. + is too small. + is too small. + ' is not a or a . + When finished with the call . + + + + Returns a for a specific algorithm. + + the name of the hash algorithm to create. + A + When finished with the call . + 'algorithm' is null or empty. + 'algorithm' is not supported. + + + + Returns a for a specific algorithm. + + the keyed hash algorithm to create. + bytes to use to create the Keyed Hash + A + When finished with the call . + 'algorithm' is null or empty. + 'algorithm' is not supported. + + + + Answers if an algorithm is supported + + the name of the cryptographic algorithm + + + + + Checks if an 'algorithm, key' pair is supported. + + the algorithm to check. + the . + true if 'algorithm, key' pair is supported. + + + + When finished with a call this method for cleanup. The default behavior is to call + + to be released. + + + + When finished with a call this method for cleanup."/> + + to be released. + + + + When finished with a call this method for cleanup."/> + + to be released. + + + + When finished with a call this method for cleanup. The default behavior is to call + + to be released. + + + + Helper class for adding DateTimes and Timespans. + + + + + Add a DateTime and a TimeSpan. + The maximum time is DateTime.MaxTime. It is not an error if time + timespan > MaxTime. + Just return MaxTime. + + Initial value. + to add. + as the sum of time and timespan. + + + + Gets the Maximum value for a DateTime specifying kind. + + DateTimeKind to use. + DateTime of specified kind. + + + + Gets the Minimum value for a DateTime specifying kind. + + DateTimeKind to use. + DateTime of specified kind. + + + + Ensures that DataTime is UTC. + + to convert. + + + + + Ensures that DateTime is UTC. + + to convert. + + + + + A compression provider that supports compression and decompression using the algorithm. + + + + + Initializes a new instance of the class used to compress and decompress used the algorithm. + + + + + Initializes a new instance of the class used to compress and decompress used the algorithm. + The compression level to use when compressing. + + + + + Gets the compression algorithm. + + + + + Specifies whether compression should emphasize speed or compression size. + Set to by default. + + + + + Decompress the value using DEFLATE algorithm. + + the bytes to decompress. + the decompressed bytes. + + + + Compress the value using the DEFLATE algorithm. + + the bytes to compress. + the compressed bytes. + + + + Answers if a compression algorithm is supported. + + the name of the compression algorithm. + true if the compression algorithm is supported, false otherwise. + + + + Represents a ECDsa security key. + + + + + Returns a new instance of . + + + + + + instance used to initialize the key. + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets key size. + + + + + A class for properties that are used for token encryption. + + + + + Initializes a new instance of the class. + + . + A key wrap algorithm to use when encrypting a session key. + Data encryption algorithm to apply. + if 'certificate' is null. + if 'alg' is null or empty. + if 'enc' is null or empty. + + + + Initializes a new instance of the class. + + to use when encrypting a session key. + A key wrap algorithm to use when encrypting a session key. + Data encryption algorithm to apply. + if 'key' is null. + if 'alg' is null or empty. + if 'enc' is null or empty. + + + + Initializes a new instance of the class. + + Used in scenarios when a key represents a 'shared' symmetric key. + For example, SAML 2.0 Assertion will be encrypted using a provided symmetric key + which won't be serialized to a SAML token. + + to apply. + Data encryption algorithm to apply. + If the is not a . + if 'enc' is null or empty. + + + + Gets the key wrap algorithm used for session key encryption. + + + + + Gets the data encryption algorithm. + + + + + Users can override the default with this property. This factory will be used for creating encryption providers. + + + + + Gets the used for encryption. + + + + + Provides authenticated encryption and decryption services. + + + + + Initializes a new instance of the class used for encryption and decryption. + The that will be used for crypto operations. + The encryption algorithm to apply. + 'key' is null. + 'algorithm' is null or whitespace. + key size is not large enough. + 'algorithm' is not supported. + a symmetricSignatureProvider is not created. + + + + + Gets the encryption algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by applications for extensibility scenarios. + + + + Gets the that is being used. + + + + + Encrypts the 'plaintext' + + the data to be encrypted. + will be combined with iv and ciphertext to create an authenticationtag. + containing ciphertext, iv, authenticationtag. + plaintext is null or empty. + authenticationData is null or empty. + AES crypto operation threw. See inner exception for details. + + + + Encrypts the 'plaintext' + + the data to be encrypted. + will be combined with iv and ciphertext to create an authenticationtag. + initialization vector for encryption. + containing ciphertext, iv, authenticationtag. + is null or empty. + is null or empty. + AES crypto operation threw. See inner exception for details. + + + + Decrypts ciphertext into plaintext + + the encrypted text to decrypt. + the authenticateData that is used in verification. + the initialization vector used when creating the ciphertext. + the authenticationTag that was created during the encyption. + decrypted ciphertext + is null or empty. + is null or empty. + is null or empty. + is null or empty. + signature over authenticationTag fails to verify. + AES crypto operation threw. See inner exception. + + + + Checks if an 'key, algorithm' pair is supported + + the + the algorithm to check. + true if 'key, algorithm' pair is supported. + + + + The algorithm parameter logically defines a HMAC algorithm. + This method returns the HMAC to use. + + + + + + + Called to obtain the byte[] needed to create a + + that will be used to obtain the byte[]. + [] that is used to populated the KeyedHashAlgorithm. + if is null. + if a byte[] can not be obtained from SecurityKey. + and are supported. + For a .Key is returned + For a Base64UrlEncoder.DecodeBytes is called with if == JsonWebAlgorithmsKeyTypes.Octet + + + + + Checks that the key has sufficient length + + that contains bytes. + the algorithm to apply. + if is null. + if is null or empty. + if is not a supported algorithm. + + + + Contains the results of operation. + + + + + Initializes a new + + the used during + protected text. + the initialization vector used. + the bytes that need be passed to . + + + + Gets the . + + + + + Gets the Ciphertext. + + + + + Gets the initialization vector. + + + + + Gets the authentication tag + + + + + Provides Wrap key and Unwrap key services. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by runtimes or for extensibility scenarios. + + + + Gets the that is being used. + + + + + Calls and + + + + + Can be over written in descendants to dispose of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer + + + + Unwrap a key. + + key to unwrap. + Unwrapped key. + + + + Wrap a key. + + the key to be wrapped + wrapped key. + + + + Provides RSA Wrap key and Unwrap key services. + + + + + Initializes a new instance of used for wrapping and un-wrappping keys. + These keys are usually symmetric session keys that are wrapped using the recipients public key. + The that will be used for cryptographic operations. + The KeyWrap algorithm to apply. + Whether this is required to un-wrap keys. If true, the private key is required. + 'key' is null. + 'algorithm' is null. + The key size doesn't match the algorithm. + If and algorithm pair are not supported. + Failed to create RSA algorithm with provided key and algorithm. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This is for use by the application and not used by this SDK. + + + + Gets the that is being used. + + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Checks if an algorithm is supported. + + The that will be used for crypto operations. + The KeyWrap algorithm to apply. + true if the algorithm is supported; otherwise, false. + + + + Unwrap a key using RSA decryption. + + the bytes to unwrap. + Unwrapped key + 'keyBytes' is null or length == 0. + If has been called. + Failed to unwrap the wrappedKey. + If the internal RSA algorithm is null. + + + + Wrap a key using RSA encryption. + + the key to be wrapped + A wrapped key + 'keyBytes' is null or has length == 0. + If has been called. + Failed to wrap the 'keyBytes'. + If the internal RSA algorithm is null. + + + + Provides Wrap key and Unwrap key services. + + + + + Initializes a new instance of the class used for wrap key and unwrap key. + The that will be used for crypto operations. + The KeyWrap algorithm to apply. + 'key' is null. + 'algorithm' is null. + If and algorithm pair are not supported. + The cannot be converted to byte array + The keysize doesn't match the algorithm. + Failed to create symmetric algorithm with provided key and algorithm. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by runtimes or for extensibility scenarios. + + + + Gets the that is being used. + + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Returns the . + + + The cannot be converted to byte array + The keysize doesn't match the algorithm. + Failed to create symmetric algorithm with provided key and algorithm. + + + + Answers if an algorithm is supported + + the + the algorithm to use + true if the algorithm is supported; otherwise, false. + + + + Unwrap a key using Symmetric decryption. + + bytes to unwrap + Unwraped key + 'keyBytes' is null or length == 0. + 'keyBytes' is not a multiple of 8. + If has been called. + Failed to unwrap the wrappedKey. + + + + Wrap a key using Symmetric encryption. + + the key to be wrapped + The wrapped key result + 'keyBytes' is null or has length 0. + 'keyBytes' is not a multiple of 8. + If has been called. + Failed to wrap 'keyBytes'. + + + + Returns the absolute DateTime or the Seconds since Unix Epoch, where Epoch is UTC 1970-01-01T0:0:0Z. + + + + + DateTime as UTV for UnixEpoch + + + + + Per JWT spec: + Gets the number of seconds from 1970-01-01T0:0:0Z as measured in UTC until the desired date/time. + + The DateTime to convert to seconds. + if dateTimeUtc less than UnixEpoch, return 0 + the number of seconds since Unix Epoch. + + + + Creates a DateTime from epoch time. + + Number of seconds. + The DateTime in UTC. + + + + Thrown when JWE compression fails. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Thrown when JWE decompression fails. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Represents a security token exception when decryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Represents a security token exception when encryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + This exception is thrown when a security token contained a key identifier but the key was not found by the runtime + when decrypting a token. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Represents a security token exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Throw this exception when a received Security Token has expiration time in the past. + + + + + Gets or sets the Expires value that created the validation exception. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when 'audience' of a token was not valid. + + + + + Gets or sets the InvalidAudience that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'issuer' of a token was not valid. + + + + + Gets or sets the InvalidIssuer that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'lifetime' of a token was not valid. + + + + + Gets or sets the NotBefore value that created the validation exception. + + + + + Gets or sets the Expires value that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'signature' of a token was not valid. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security Token has an invalid issuer signing key. + + + + + Gets or sets the SigningKey that was found invalid. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Represents a key wrap exception when encryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + This exception is thrown when a security is missing an ExpirationTime. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security token has an effective time + in the future. + + + + + Gets or sets the NotBefore value that created the validation exception. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when an add to the TokenReplayCache fails. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security Token has been replayed. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when a security token contained a key identifier but the key was not found by the runtime. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Represents a security token validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Compression provider interface. + + + + + Gets the compression algorithm. + + + + + Called to determine if an algorithm is supported. + + the algorithm that defines the compression method. + true if supported + + + + Decompress. + + the value to decompress. + + + + Compress. + + the value to decompress. + + + + Provides extensibility for cryptographic operators. + If custom operators are needed for then can be set to + return these operators. will be before each creation. + + + + + Called to determine if a cryptographic operation is supported. + + the algorithm that defines the cryptographic operator. + the arguments required by the cryptographic operator. May be null. + true if supported + + + + returns a cryptographic operator that supports the algorithm. + + the algorithm that defines the cryptographic operator. + the arguments required by the cryptographic operator. May be null. + call when finished with the object. + + + + called to release the object returned from + + the object returned from . + + + + Defines a cache for crypto providers. + Current support is limited to only. + + + + + Returns the cache key to use when looking up an entry into the cache for a + + the to create the key for. + if signatureProvider is null. + the cache key to use for finding a . + + + + Returns the 'key' that will be used to find a crypto provider in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + if securityKey is null. + if algorithm is null or empty string. + if typeofProvider is null or empty string. + the cache key to use for finding a crypto provider. + + + + Trys to adds a to this cache. + + to cache. + if signatureProvider is null. + true if the was added, false if the cache already contained the + if the is added will be set to 'this'. + + + + Trys to find a to this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + a bool to indicate if the will be used to sign. + the if found. + if securityKey is null. + if algorithm is null or empty string. + if typeofProvider is null or empty string. + true if a was found, false otherwise. + + + + Trys to remove a from this cache. + + to remove. + if signatureProvider is null. + true if the was removed, false if the was not found. + if the is removed will be set to null. + + + + ISecurityTokenValidator + + + + + Returns true if the token can be read, false otherwise. + + + + + Returns true if a token can be validated. + + + + + Gets and sets the maximum size in bytes, that a will be processed. + + + + + Validates a token passed as a string using + + + + + Interface that defines a simple cache for tacking replaying of security tokens. + + + + + Try to add a securityToken. + + the security token to add. + the time when security token expires. + true if the security token was successfully added. + + + + Try to find securityToken + + the security token to find. + true if the security token is found. + + + + Constants for JsonWebAlgorithms "kty" Key Type (sec 6.1) + http://tools.ietf.org/html/rfc7518#section-6.1 + + + + + Represents a JSON Web Key as defined in http://tools.ietf.org/html/rfc7517. + + + + + Magic numbers identifying ECDSA blob types + + + + + Returns a new instance of . + + A string that contains JSON Web Key parameters in JSON format. + + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of . + + + + + Initializes an new instance of from a json string. + + A string that contains JSON Web Key parameters in JSON format. + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + When deserializing from JSON any properties that are not defined will be placed here. + + + + + Gets or sets the 'alg' (KeyType).. + + + + + Gets or sets the 'crv' (ECC - Curve).. + + + + + Gets or sets the 'd' (ECC - Private Key OR RSA - Private Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'dp' (RSA - First Factor CRT Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'dq' (RSA - Second Factor CRT Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'e' (RSA - Exponent).. + + + + + Gets or sets the 'k' (Symmetric - Key Value).. + + Base64urlEncoding + + + + Gets the key id of this . + + + + + Gets the 'key_ops' (Key Operations).. + + + + + Gets or sets the 'kid' (Key ID).. + + + + + Gets or sets the 'kty' (Key Type).. + + + + + Gets or sets the 'n' (RSA - Modulus).. + + Value is formated as: Base64urlEncoding + + + + Gets or sets the 'oth' (RSA - Other Primes Info).. + + + + + Gets or sets the 'p' (RSA - First Prime Factor).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'q' (RSA - Second Prime Factor).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'qi' (RSA - First CRT Coefficient).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'use' (Public Key Use).. + + + + + Gets or sets the 'x' (ECC - X Coordinate).. + + Value is formated as: Base64urlEncoding + + + + Gets the 'x5c' collection (X.509 Certificate Chain).. + + + + + Gets or sets the 'x5t' (X.509 Certificate SHA-1 thumbprint).. + + + + + Gets or sets the 'x5t#S256' (X.509 Certificate SHA-1 thumbprint).. + + + + + Gets or sets the 'x5u' (X.509 URL).. + + + + + Gets or sets the 'y' (ECC - Y Coordinate).. + + Value is formated as: Base64urlEncoding + + + + Gets the key size of . + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets a bool that determines if the 'key_ops' (Key Operations) property should be serialized. + This is used by Json.NET in order to conditionally serialize properties. + + true if 'key_ops' (Key Operations) is not empty; otherwise, false. + + + + Gets a bool that determines if the 'x5c' collection (X.509 Certificate Chain) property should be serialized. + This is used by Json.NET in order to conditionally serialize properties. + + true if 'x5c' collection (X.509 Certificate Chain) is not empty; otherwise, false. + + + + Returns the size of key in bytes + + Represents ecdsa curve -P256, P384, P521 + Size of the key in bytes + + + + Returns the size of key in bits. + + Represents ecdsa curve -P256, P384, P512 + Size of the key in bits. + + + + Returns the magic value representing the curve corresponding to the curve id. + + Represents ecdsa curve -P256, P384, P512 + Whether the provider will create signatures or not + Uint representing the magic number + + + + Converts a into a + Supports: , and . + + + + + Converts a into a + + a to convert. + a + if is null. + if is not a supported type. + Supports: , and . + + + + Converts a into a + + a to convert. + a + if is null. + + + + Converts a into a + + a to convert. + a + if is null. + + + + Converts a into a + + a to convert. + a + if is null. + + + + Constants for JsonWebKey Elliptical Curve Types + https://tools.ietf.org/html/rfc7518#section-6.2.1.1 + + + + + Names for Json Web Key Values + + + + + Contains a collection of that can be populated from a json string. + + provides support for http://tools.ietf.org/html/rfc7517. + + + + Returns a new instance of . + + a string that contains JSON Web Key parameters in JSON format. + + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of . + + + + + Initializes an new instance of from a json string. + + a json string containing values. + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of from a json string. + + a json string containing values. + jsonSerializerSettings + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + When deserializing from JSON any properties that are not defined will be placed here. + + + + + Gets the . + + + + + Returns the JsonWebKeys as a . + + + + + Names for Json Web Key Set Values + + + + + Constants for JsonWebKeyUse (sec 4.2) + http://tools.ietf.org/html/rfc7517#section-4 + + + + + Log messages and codes + + + + + The purpose of this class is to ensure that we obtain an RsaCryptoServiceProvider that supports SHA-256 signatures. + If the original RsaCryptoServiceProvider doesn't support SHA-256, we create a new one using the same KeyContainer. + + + + + Gets the SignatureAlgorithm + + + + + Gets the KeyExchangeAlgorithm + + + + + Initializes an new instance of . + + + if is null. + + + + Decrypts data with the System.Security.Cryptography.RSA algorithm. + + The data to be decrypted. + true to perform direct System.Security.Cryptography.RSA decryption using OAEP padding + (only available on a computer running Microsoft Windows XP or later) otherwise, false to use PKCS#1 v1.5 padding. + decrypted bytes. + if is null or has Length == 0. + + + + Decrypts the input. + + the bytes to decrypt. + decrypted bytes + if is null or Length == 0. + + + + Encrypts data with the System.Security.Cryptography.RSA algorithm. + + The data to be encrypted. + true to perform direct System.Security.Cryptography.RSA encryption using OAEP padding (only available on a computer running Microsoft Windows XP or later); + otherwise, false to use PKCS#1 v1.5 padding. + encrypted bytes. + if is null or has Length == 0. + + + + Encrypts the input. + + the bytes to encrypt. + encrypted bytes. + if is null or Length == 0. + + + + Computes the hash value of the specified byte array using the specified hash algorithm, and signs the resulting hash value. + + The input byte array for which to compute the hash. + The hash algorithm to use to create the hash value. + The Signature for the specified data. + if is null or Length == 0. + if is null. + + + + Verifies that a digital signature is valid by determining the hash value in the signature using the provided public key and comparing it to the hash value of the provided data. + + The input byte array. + The hash algorithm to use to create the hash value. + The signature byte array to be verified. + true if the signature is valid; otherwise, false. + if is null or Length == 0. + if is null. + if is null or Length == 0. + + + + Exports rsa parameters as + + flag to control is private parameters are included. + + + + + Imports rsa parameters as + + to import. + + + + Calls to release managed resources. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Represents a Rsa security key. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets RSA key size. + + + + + used to initialize the key. + + + + + instance used to initialize the key. + + + + + Constants for Security Algorithm. + + + + + Base class for Security Key. + + + + + This must be overridden to get the size of this . + + + + + Gets the key id of this . + + + + + Gets or sets . + + + + + Contains information about the keys inside the tokens. + + + + + Base class for security token. + + + + + This must be overridden to get the Id of this . + + + + + This must be overridden to get the issuer of this . + + + + + This must be overridden to get the . + + + + + This must be overridden to get or set the that signed this instance. + + .ValidateToken(...) can this value when a is used to successfully validate a signature. + + + + This must be overridden to get the time when this was Valid. + + + + + This must be overridden to get the time when this is no longer Valid. + + + + + Contains some information which used to create a security token. + + + + + Gets or sets the value of the 'audience' claim. + + + + + Gets or sets the used to create a encrypted security token. + + + + + Gets or sets the value of the 'expiration' claim. + + + + + Gets or sets the issuer of this . + + + + + Gets or sets the time the security token was issued. + + + + + Gets or sets the notbefore time for the security token. + + + + + Gets or sets the used to create a security token. + + + + + Gets or sets the . + + + + + Defines the interface for a Security Token Handler. + + + + + Creates an instance of + + + + + Returns . + + + true if attached; otherwise, false. + + + + Returns . + + + + + + Gets a value indicating whether this handler supports validation of tokens + handled by this instance. + v + 'True' if the instance is capable of SecurityToken + validation. + + + + Gets a value indicating whether the class provides serialization functionality to serialize token handled + by this instance. + + true if the WriteToken method can serialize this token. + + + + This must be overridden to get the System.Type of the SecurityToken this instance handles. + + + + + Indicates whether the current token string can be read as a token + of the type handled by this instance. + + The token string thats needs to be read. + 'True' if the ReadToken method can parse the token string. + + + + Deserializes from string a token of the type handled by this instance. + + The string to be deserialized. + SecurityToken instance which represents the serialized token. + + + + Gets security token. + + . + SecurityToken instance which represents the serialized token. + + + + Serializes to string a token of the type handled by this instance. + + A token of type TokenType. + The serialized token. + + + + This must be overridden to serialize to XML a token of the type handled by this instance. + + The XML writer. + A token of type . + + + + This must be overridden to deserialize token with the provided . + + . + the current . + SecurityToken instance which represents the serialized token. + + + + This must be overridden to validate a token passed as a string using + + A token of type . + the current . + The token of type that was validated. + + + + Provides signature services, signing and verifying. + + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + is null. + is null or empty. + + + + Gets the signature algorithm. + + + + + Gets or sets a user context for a . + + This is null by default. This is for use by the application and not used by this SDK. + + + + Gets or sets the that is associated with this + + + + + Calls and + + + + + Can be over written in descendants to dispose of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer + + + + Gets the . + + + + + This must be overridden to produce a signature over the 'input'. + + bytes to sign. + signed bytes + + + Verifies that the over using the + and specified by this + are consistent. + the bytes that were signed. + signature to compare against. + true if the computed signature matches the signature parameter, false otherwise. + + + + Gets or sets a bool indicating if this is expected to create signatures. + + + + + Defines the , algorithm and digest for digital signatures. + + + + + Initializes a new instance of the class. + + that will be used for signing. + Algorithm will be set to . + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'key' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + that will be used for signing. + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + . + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'key' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + . + The signature algorithm to apply. + The digest algorithm to apply. + if 'key' is null. + if 'algorithm' is null or empty. + if 'digest' is null or empty. + + + + Gets the signature algorithm. + + if 'value' is null or empty. + + + + Gets the digest algorithm. + + + + + Users can override the default with this property. This factory will be used for creating signature providers. + + This will have precedence over + + + + Gets the used for signature creation or validation. + + + + + Gets the key id associated with . + + + + + Defines the default set of algorithms this library supports + + + + + Checks if an 'algorithm, key' pair is supported. + + the algorithm to check. + the . + true if 'algorithm, key' pair is supported. + + + + Represents a symmetric security key. + + + + + Returns a new instance of instance. + + The byte array of the key. + + + + Gets the key size. + + + + + Gets the byte array of the key. + + + + + Provides signing and verifying operations using a and specifying an algorithm. + + + + + This is the minimum .KeySize when creating and verifying signatures. + + + + + Initializes a new instance of the class that uses an to create and / or verify signatures over a array of bytes. + + The that will be used for signature operations. + The signature algorithm to use. + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + '.KeySize' is smaller than . + + + + Initializes a new instance of the class that uses an to create and / or verify signatures over a array of bytes. + + The that will be used for signature operations. + The signature algorithm to use. + indicates if this will be used to create signatures. + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + '.KeySize' is smaller than . + + + + Gets or sets the minimum .KeySize"/>. + + 'value' is smaller than . + + + + Called to obtain the byte[] needed to create a + + that will be used to obtain the byte[]. + [] that is used to populated the KeyedHashAlgorithm. + if key is null. + if a byte[] can not be obtained from SecurityKey. + and are supported. + For a .Key is returned + For a Base64UrlEncoder.DecodeBytes is called with if == JsonWebAlgorithmsKeyTypes.Octet + + + + + Returns the . + + The hash algorithm to use to create the hash value. + The byte array of the key. + + + + + Gets the for this . + + + + + Produces a signature over the 'input' using the and 'algorithm' passed to . + + The bytes to sign. + Signed bytes + 'input' is null. + 'input.Length' == 0. + has been called. + is null. This can occur if a derived type deletes it or does not create it. + Sign is thread safe. + + + + Verifies that a signature created over the 'input' matches the signature. Using and 'algorithm' passed to . + + The bytes to verify. + signature to compare against. + true if computed signature matches the signature parameter, false otherwise. + 'input' is null. + 'signature' is null. + 'input.Length' == 0. + 'signature.Length' == 0. + has been called. + If the internal is null. This can occur if a derived type deletes it or does not create it. + Verify is thread safe. + + + + Verifies that a signature created over the 'input' matches the signature. Using and 'algorithm' passed to . + + The bytes to verify. + signature to compare against. + number of bytes of signature to use. + true if computed signature matches the signature parameter, false otherwise. + 'input' is null. + 'signature' is null. + 'input.Length' == 0. + 'signature.Length' == 0. + 'length < 1' + has been called. + If the internal is null. This can occur if a derived type deletes it or does not create it. + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Defines properties shared across all security token handlers. + + + + + Default lifetime of tokens created. When creating tokens, if 'expires' and 'notbefore' are both null, + then a default will be set to: expires = DateTime.UtcNow, notbefore = DateTime.UtcNow + TimeSpan.FromMinutes(TokenLifetimeInMinutes). + + + + + Gets and sets the maximum token size in bytes that will be processed. + + 'value' less than 1. + + + + Gets or sets a bool that controls if token creation will set default 'exp', 'nbf' and 'iat' if not specified. + + See: for configuration. + + + + Gets or sets the token lifetime in minutes. + + Used during token creation to set the default expiration ('exp'). + 'value' less than 1. + + + + Definition for AudienceValidator. + + The audiences found in the . + The being validated. + required for validation. + true if the audience is considered valid. + + + + Definition for IssuerSigningKeyResolver. + + The representation of the token that is being validated. + The that is being validated. It may be null. + A key identifier. It may be null. + required for validation. + A to use when validating a signature. + + + + Definition for IssuerSigningKeyValidator. + + The that signed the . + The being validated. + required for validation. + + + + Definition for IssuerValidator. + + The issuer to validate. + The that is being validated. + required for validation. + The issuer to use when creating the "Claim"(s) in a "ClaimsIdentity". + The delegate should return a non null string that represents the 'issuer'. If null a default value will be used. + + + + Definition for LifetimeValidator. + + The 'notBefore' time found in the . + The 'expiration' time found in the . + The being validated. + required for validation. + + + + Definition for TokenReplayValidator. + + The 'expiration' time found in the . + The being validated. + required for validation. + + + + + Definition for SignatureValidator. + + A securityToken with a signature. + required for validation. + + + + Definition for TokenReader. + + A securityToken with a signature. + required for validation. + + + + Definition for TokenDecryptionKeyResolver. + + The representation of the token to be decrypted. + The to be decrypted. The runtime by default passes null. + A key identifier. It may be null. + required for validation. + A to use when decrypting the token. + + + + Contains a set of parameters that are used by a when validating a . + + + + + This is the fallback authenticationtype that a will use if nothing is set. + + + + + Default for the clock skew. + + 300 seconds (5 minutes). + + + + Default for the maximm token size. + + 2 MB (mega bytes). + + + + Copy constructor for . + + + + + Initializes a new instance of the class. + + + + + Gets or sets . + + + + + Gets or sets a delegate that will be used to validate the audience. + + + If set, this delegate will be called to validate the 'audience' instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to read the token. + + + If set, this delegate will be called to read the token instead of normal processing. + + + + + Gets or sets the AuthenticationType when creating a . + + If 'value' is null or whitespace. + + + + Gets or sets the clock skew to apply when validating a time. + + If 'value' is less than 0. + + + + Returns a new instance of with values copied from this object. + + A new object copied from this object + This is a shallow Clone. + + + + Creates a using: + + 'NameClaimType': If NameClaimTypeRetriever is set, call delegate, else call NameClaimType. If the result is a null or empty string, use . + 'RoleClaimType': If RoleClaimTypeRetriever is set, call delegate, else call RoleClaimType. If the result is a null or empty string, use . + + A with Authentication, NameClaimType and RoleClaimType set. + + + + Users can override the default with this property. This factory will be used for creating signature providers. + + + + + Gets or sets the that is to be used for decryption. + + + + + Gets or sets a delegate that will be called to retreive a used for decryption. + + + This will be used to decrypt the token. This can be helpful when the does not contain a key identifier. + + + + + Gets or sets a delegate for validating the that signed the token. + + + If set, this delegate will be called to validate the that signed the token, instead of normal processing. + + + + + Gets or sets the that is to be used for signature validation. + + + + + Gets or sets a delegate that will be called to retrieve a used for signature validation. + + + This will be used to check the signature. This can be helpful when the does not contain a key identifier. + + + + + Gets or sets an used for signature validation. + + + + + Gets or sets a delegate that will be used to validate the issuer of the token. + + + If set, this delegate will be called to validate the 'issuer' of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to validate the lifetime of the token + + + If set, this delegate will be called to validate the lifetime of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to validate the token replay of the token + + + If set, this delegate will be called to validate the token replay of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a that defines the . + + + Controls the value returns. It will return the first where the equals . + + + + + Gets or sets the that defines the . + + + Controls the results of . + Each where == will be checked for a match against the 'string' passed to . + + + + + Gets or sets a delegate that will be called to obtain the NameClaimType to use when creating a ClaimsIdentity + after validating a token. + + + + + Gets or sets the that contains a collection of custom key/value pairs. This allows addition of parameters that could be used in custom token validation scenarios. + + + + + Gets or sets a value indicating whether tokens must have an 'expiration' value. + + + + + Gets or sets a value indicating whether a can be considered valid if not signed. + + + + + Gets or sets a delegate that will be called to obtain the RoleClaimType to use when creating a ClaimsIdentity + after validating a token. + + + + + Gets or sets a boolean to control if the original token should be saved after the security token is validated. + + The runtime will consult this value and save the original token that was validated. + + + + Gets or sets a delegate that will be used to validate the signature of the token. + + + If set, this delegate will be called to signature of the token, instead of normal processing. + + + + + Gets or sets the that is to be used for decrypting inbound tokens. + + + + + Gets or set the that store tokens that can be checked to help detect token replay. + + If set, then tokens must have an expiration time or the runtime will fault. + + + + Gets or sets a value indicating if an actor token is detected, whether it should be validated. + + + + + Gets or sets a boolean to control if the audience will be validated during token validation. + + Validation of the audience, mitigates forwarding attacks. For example, a site that receives a token, could not replay it to another side. + A forwarded token would contain the audience of the original site. + + + + Gets or sets a boolean to control if the issuer will be validated during token validation. + + + Validation of the issuer mitigates forwarding attacks that can occur when an + IdentityProvider represents multiple tenants and signs tokens with the same keys. + It is possible that a token issued for the same audience could be from a different tenant. For example an application could accept users from + contoso.onmicrosoft.com but not fabrikam.onmicrosoft.com, both valid tenants. A application that accepts tokens from fabrikam could forward them + to the application that accepts tokens for contoso. + + + + + Gets or sets a boolean to control if the lifetime will be validated during token validation. + + + + + Gets or sets a boolean that controls if validation of the that signed the securityToken is called. + + It is possible for tokens to contain the public key needed to check the signature. For example, X509Data can be hydrated into an X509Certificate, + which can be used to validate the signature. In these cases it is important to validate the SigningKey that was used to validate the signature. + + + + Gets or sets a boolean to control if the token replay will be validated during token validation. + + + + + Gets or sets a string that represents a valid audience that will be used to check against the token's audience. + + + + + Gets or sets the that contains valid audiences that will be used to check against the token's audience. + + + + + Gets or sets a that represents a valid issuer that will be used to check against the token's issuer. + + + + + Gets or sets the that contains valid issuers that will be used to check against the token's issuer. + + + + + Generates unique IDs. + + + + + Creates a unique ID suitable for use in an xml:id field. The value is + not hard to guess but is unique. + + The unique ID. + + + + Creates a unique ID similar to that created by CreateNonRandomId, + but instead of an underscore, the supplied prefix is used. + + The prefix to use. + The unique ID, with the given prefix. + + + + Creates a unique, random ID suitable for use in an xml:id field. The + value is hard to guess and unique. + + The unique ID. + + + + Creates a unique, random ID similar to that created by CreateRandomId, + but instead of an underscore, the supplied prefix is used. + + The prefix to use. + The random URI. + + + + Creates a unique, random ID suitable for use as a URI. The value is + hard to guess and unique. The URI is in the urn:uuid: namespace. + + The random URI. + + + + Contains some utility methods. + + + + + A string with "empty" value. + + + + + A string with "null" value. + + + + + Creates a copy of the byte array. + + The resource array. + A copy of the byte array. + + + + Serializes the list of strings into string as follows: + 'str1','str2','str3' ... + + + The strings used to build a comma delimited string. + + + The single . + + + + + Returns whether the input string is https. + + The input string. + true if the input string is https; otherwise, false. + + + + Returns whether the input uri is https. + + . + true if the input uri is https; otherwise, false. + + + + Compares two byte arrays for equality. Hash size is fixed normally it is 32 bytes. + The attempt here is to take the same time if an attacker shortens the signature OR changes some of the signed contents. + + + One set of bytes to compare. + + + The other set of bytes to compare with. + + + true if the bytes are equal, false otherwise. + + + + + Compares two byte arrays for equality. Hash size is fixed normally it is 32 bytes. + The attempt here is to take the same time if an attacker shortens the signature OR changes some of the signed contents. + + + One set of bytes to compare. + + + The other set of bytes to compare with. + + length of array to check + + true if the bytes are equal, false otherwise. + + + + + AudienceValidator + + + + + Determines if the audiences found in a are valid. + + The audiences found in the . + The being validated. + required for validation. + If 'vaidationParameters' is null. + If 'audiences' is null and is true. + If is null or whitespace and is null. + If none of the 'audiences' matched either or one of . + An EXACT match is required. + + + + Determines if an issuer found in a is valid. + + The issuer to validate + The that is being validated. + required for validation. + The issuer to use when creating the "Claim"(s) in a "ClaimsIdentity". + If 'vaidationParameters' is null. + If 'issuer' is null or whitespace and is true. + If is null or whitespace and is null. + If 'issuer' failed to matched either or one of . + An EXACT match is required. + + + + Validates the that signed a . + + The that signed the . + The being validated. + required for validation. + if 'securityKey' is null and ValidateIssuerSigningKey is true. + if 'securityToken' is null and ValidateIssuerSigningKey is true. + if 'vaidationParameters' is null. + + + + Validates the lifetime of a . + + The 'notBefore' time found in the . + The 'expiration' time found in the . + The being validated. + required for validation. + If 'vaidationParameters' is null. + If 'expires.HasValue' is false and is true. + If 'notBefore' is > 'expires'. + If 'notBefore' is > DateTime.UtcNow. + If 'expires' is < DateTime.UtcNow. + All time comparisons apply . + + + + Validates if a token has been replayed. + + When does the security token expire. + The being validated. + required for validation. + If 'securityToken' is null or whitespace. + If 'validationParameters' is null or whitespace. + If is not null and expirationTime.HasValue is false. When a TokenReplayCache is set, tokens require an expiration time. + If the 'securityToken' is found in the cache. + If the 'securityToken' could not be added to the . + + + + Validates if a token has been replayed. + + The being validated. + When does the security token expire. + required for validation. + If 'securityToken' is null or whitespace. + If 'validationParameters' is null or whitespace. + If is not null and expirationTime.HasValue is false. When a TokenReplayCache is set, tokens require an expiration time. + If the 'securityToken' is found in the cache. + If the 'securityToken' could not be added to the . + + + + An designed to construct based on a x509 certificate. + + + + + Designed to construct based on a x509 certificate. + + A + + will be used as the key wrap algorithm + will be used as the data encryption algorithm + + if 'certificate' is null. + + + + Designed to construct based on the x509 certificate, a key wrap algorithm, and data encryption algorithm. + + A + A key wrap algorithm + Data encryption algorithm + if 'certificate' is null. + if 'keyWrapAlgorithm' is null or empty. + if 'dataEncryptionAlgorithm' is null or empty. + + + + Gets the used by this instance. + + + + + Security key that allows access to cert + + + + + Instantiates a using a + + The cert to use. + + + + Gets the key size. + + + + + Gets the X5t of this . + + + + + Returns the private key from the . + + + + + Gets the public key from the . + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets the . + + + + + Returns a bool indicating if this key is equivalent to another key. + + true if the keys are equal; otherwise, false. + + + + Returns an int hash code. + + An int hash code + + + + Defines the , algorithm and digest for digital signatures. + + + + + Initializes a new instance of the class. + + that will be used for signing. + Algorithm will be set to . + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + + + + Initializes a new instance of the class. + + A that will be used for signing. + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + if 'algorithm' is null or empty. + + + + Gets the used by this instance. + + + + diff --git a/Bin/Microsoft.Owin.xml b/Bin/Microsoft.Owin.xml new file mode 100644 index 000000000..4380dc571 --- /dev/null +++ b/Bin/Microsoft.Owin.xml @@ -0,0 +1,3316 @@ + + + + Microsoft.Owin + + + + + Extension methods for . + + + + + Inserts a middleware into the OWIN pipeline. + + The middleware type + + Any additional arguments for the middleware constructor + + + + + Inserts into the OWIN pipeline a middleware which does not have a next middleware reference. + + + An app that handles all requests + + + + Inserts a middleware into the OWIN pipeline. + + + An app that handles the request or calls the given next Func + + + + + An ordered list of known Asp.Net integrated pipeline stages. More details on the ASP.NET integrated pipeline can be found at http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx + + + + + Corresponds to the AuthenticateRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAuthenticateRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the AuthorizeRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAuthorizeRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the ResolveRequestCache stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostResolveRequestCache stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the MapRequestHandler stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostMapRequestHandler stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the AcquireRequestState stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAcquireRequestState stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PreRequestHandlerExecute stage of the ASP.NET integrated pipeline. + + + + + Extension methods for the MapMiddleware + + + + + If the request path starts with the given pathMatch, execute the app configured via configuration parameter instead of + continuing to the next component in the pipeline. + + + The path to match + The branch to take for positive path matches + + + + + If the request path starts with the given pathMatch, execute the app configured via configuration parameter instead of + continuing to the next component in the pipeline. + + + The path to match + The branch to take for positive path matches + + + + + Extension methods for the MapWhenMiddleware + + + + + Branches the request pipeline based on the result of the given predicate. + + + Invoked with the request environment to determine if the branch should be taken + Configures a branch to take + + + + + Branches the request pipeline based on the async result of the given predicate. + + + Invoked asynchronously with the request environment to determine if the branch should be taken + Configures a branch to take + + + + + Represents a middleware for executing in-line function middleware. + + + + + Initializes a new instance of the class. + + The pointer to next middleware. + A function that handles all requests. + + + + Initializes a new instance of the class. + + The pointer to next middleware. + A function that handles the request or calls the given next function. + + + + Invokes the handler for processing the request. + + The OWIN context. + The object that represents the request operation. + + + + Extension methods used to indicate at which stage in the integrated pipeline prior middleware should run. + + + + + Call after other middleware to specify when they should run in the integrated pipeline. + + The IAppBuilder. + The name of the integrated pipeline in which to run. + The original IAppBuilder for chaining. + + + + Call after other middleware to specify when they should run in the integrated pipeline. + + The IAppBuilder. + The stage of the integrated pipeline in which to run. + The original IAppBuilder for chaining. + + + + Contains the parsed form values. + + + + + Initializes a new instance of the class. + + The store for the form. + + + + Represents a wrapper for owin.RequestHeaders and owin.ResponseHeaders. + + + + + Initializes a new instance of the class. + + The underlying data store. + + + + Gets an that contains the keys in the ;. + + An that contains the keys in the . + + + + + + + + + Gets the number of elements contained in the ;. + + The number of elements contained in the . + + + + Gets a value that indicates whether the is in read-only mode. + + true if the is in read-only mode; otherwise, false. + + + + Get or sets the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Throws KeyNotFoundException if the key is not present. + + The header name. + + + + + Returns an enumerator that iterates through a collection. + + An object that can be used to iterate through the collection. + + + + Returns an enumerator that iterates through a collection. + + An object that can be used to iterate through the collection. + + + + Get the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Get the associated values from the collection without modification. + + The header name. + the associated value from the collection without modification, or null if the key is not present. + + + + Get the associated values from the collection separated into individual values. + Quoted values will not be split, and the quotes will be removed. + + The header name. + the associated values from the collection separated into individual values, or null if the key is not present. + + + + Add a new value. Appends to the header if already present + + The header name. + The header value. + + + + Add new values. Each item remains a separate array entry. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values with any existing values. + + The header name. + The header values. + + + + Sets a specific header value. + + The header name. + The header value. + + + + Sets the specified header values without modification. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values. + + The header name. + The header values. + + + + Adds the given header and values to the collection. + + The header name. + The header values. + + + + Determines whether the contains a specific key. + + The key. + true if the contains a specific key; otherwise, false. + + + + Removes the given header from the collection. + + The header name. + true if the specified object was removed from the collection; otherwise, false. + + + + Retrieves a value from the dictionary. + + The header name. + The value. + true if the contains the key; otherwise, false. + + + + Adds a new list of items to the collection. + + The item to add. + + + + Clears the entire list of objects. + + + + + Returns a value indicating whether the specified object occurs within this collection. + + The item. + true if the specified object occurs within this collection; otherwise, false. + + + + Copies the elements to a one-dimensional Array instance at the specified index. + + The one-dimensional Array that is the destination of the specified objects copied from the . + The zero-based index in at which copying begins. + + + + Removes the given item from the the collection. + + The item. + true if the specified object was removed from the collection; otherwise, false. + + + + Represents the host portion of a Uri can be used to construct Uri's properly formatted and encoded for use in + HTTP headers. + + + + + Creates a new HostString without modification. The value should be Unicode rather than punycode, and may have a port. + IPv4 and IPv6 addresses are also allowed, and also may have ports. + + + + + + Returns the original value from the constructor. + + + + + Returns the value as normalized by ToUriComponent(). + + + + + + Returns the value properly formatted and encoded for use in a URI in a HTTP header. + Any Unicode is converted to punycode. IPv6 addresses will have brackets added if they are missing. + + + + + + Creates a new HostString from the given uri component. + Any punycode will be converted to Unicode. + + + + + + + Creates a new HostString from the host and port of the give Uri instance. + Punycode will be converted to Unicode. + + + + + + + Compares the equality of the Value property, ignoring case. + + + + + + + Compares against the given object only if it is a HostString. + + + + + + + Gets a hash code for the value. + + + + + + Compares the two instances for equality. + + + + + + + + Compares the two instances for inequality. + + + + + + + + Contains the parsed form values. + + + + + Represents a wrapper for owin.RequestHeaders and owin.ResponseHeaders. + + + + + Get or sets the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Get the associated values from the collection separated into individual values. + Quoted values will not be split, and the quotes will be removed. + + The header name. + the associated values from the collection separated into individual values, or null if the key is not present. + + + + Add a new value. Appends to the header if already present + + The header name. + The header value. + + + + Add new values. Each item remains a separate array entry. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values with any existing values. + + The header name. + The header values. + + + + Sets a specific header value. + + The header name. + The header value. + + + + Sets the specified header values without modification. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values. + + The header name. + The header values. + + + + An implementation of ICookieManager that writes directly to IOwinContext.Response.Cookies. + + + + + Read a cookie with the given name from the request. + + + + + + + + Appends a new response cookie to the Set-Cookie header. + + + + + + + + + Deletes the cookie with the given key by appending an expired cookie. + + + + + + + + This handles cookies that are limited by per cookie length. It breaks down long cookies for responses, and reassembles them + from requests. + + + + + Creates a new instance of ChunkingCookieManager. + + + + + The maximum size of cookie to send back to the client. If a cookie exceeds this size it will be broken down into multiple + cookies. Set this value to null to disable this behavior. The default is 4090 characters, which is supported by all + common browsers. + + Note that browsers may also have limits on the total size of all cookies per domain, and on the number of cookies per domain. + + + + + Throw if not all chunks of a cookie are available on a request for re-assembly. + + + + + Get the reassembled cookie. Non chunked cookies are returned normally. + Cookies with missing chunks just have their "chunks:XX" header returned. + + + + The reassembled cookie, if any, or null. + + + + Appends a new response cookie to the Set-Cookie header. If the cookie is larger than the given size limit + then it will be broken down into multiple cookies as follows: + Set-Cookie: CookieName=chunks:3; path=/ + Set-Cookie: CookieNameC1=Segment1; path=/ + Set-Cookie: CookieNameC2=Segment2; path=/ + Set-Cookie: CookieNameC3=Segment3; path=/ + + + + + + + + + Deletes the cookie with the given key by setting an expired state. If a matching chunked cookie exists on + the request, delete each chunk. + + + + + + + + An abstraction for reading request cookies and writing response cookies. + + + + + Read a cookie with the given name from the request. + + + + + + + + Append a cookie to the response. + + + + + + + + + Append a delete cookie to the response. + + + + + + + + Abstracts the system clock to facilitate testing. + + + + + Retrieves the current system time in UTC. + + + + + Provides access to the normal system clock. + + + + + Retrieves the current system time in UTC. + + + + + Response generation utilities. + + + + + Append the given query to the uri. + + The base uri. + The query string to append, if any. + The combine result. + + + + Append the given query key and value to the uri. + + The base uri. + The name of the query key. + The query value. + The combine result. + + + + Append the given query keys and values to the uri. + + The base uri. + A collection of name value query pairs to append. + The combine result. + + + + Converts between an OwinMiddlware and an . + + + + + + + + + + + + + + + + + + Transitions between and OwinMiddleware. + + + + + + + + + + + + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + + Adds adapters between and OwinMiddleware. + + + + + Adds adapters between and OwinMiddleware. + + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets a wrapper exposing request specific properties. + + A wrapper exposing request specific properties. + + + + Gets a wrapper exposing response specific properties. + + A wrapper exposing response specific properties. + + + + Gets the Authentication middleware functionality available on the current request. + + The authentication middleware functionality available on the current request. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets or sets the host.TraceOutput environment value. + + The host.TraceOutput TextWriter. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or set the HTTP method. + + The HTTP method. + + + + Gets or set the HTTP request scheme from owin.RequestScheme. + + The HTTP request scheme from owin.RequestScheme. + + + + Returns true if the owin.RequestScheme is https. + + true if this request is using https; otherwise, false. + + + + Gets or set the Host header. May include the port. + + The Host header. + + + + Gets or set the owin.RequestPathBase. + + The owin.RequestPathBase. + + + + Gets or set the request path from owin.RequestPath. + + The request path from owin.RequestPath. + + + + Gets or set the query string from owin.RequestQueryString. + + The query string from owin.RequestQueryString. + + + + Gets the query value collection parsed from owin.RequestQueryString. + + The query value collection parsed from owin.RequestQueryString. + + + + Gets the uniform resource identifier (URI) associated with the request. + + The uniform resource identifier (URI) associated with the request. + + + + Gets or set the owin.RequestProtocol. + + The owin.RequestProtocol. + + + + Gets the request headers. + + The request headers. + + + + Gets the collection of Cookies for this request. + + The collection of Cookies for this request. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Cache-Control header. + + The Cache-Control header. + + + + Gets or sets the Media-Type header. + + The Media-Type header. + + + + Gets or set the Accept header. + + The Accept header. + + + + Gets or set the owin.RequestBody Stream. + + The owin.RequestBody Stream. + + + + Gets or sets the cancellation token for the request. + + The cancellation token for the request. + + + + Gets or set the server.LocalIpAddress. + + The server.LocalIpAddress. + + + + Gets or set the server.LocalPort. + + The server.LocalPort. + + + + Gets or set the server.RemoteIpAddress. + + The server.RemoteIpAddress. + + + + Gets or set the server.RemotePort. + + The server.RemotePort. + + + + Gets or set the server.User. + + The server.User. + + + + Asynchronously reads and parses the request body as a form. + + The parsed form data. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or sets the optional owin.ResponseStatusCode. + + The optional owin.ResponseStatusCode, or 200 if not set. + + + + Gets or sets the the optional owin.ResponseReasonPhrase. + + The the optional owin.ResponseReasonPhrase. + + + + Gets or sets the owin.ResponseProtocol. + + The owin.ResponseProtocol. + + + + Gets the response header collection. + + The response header collection. + + + + Gets a collection used to manipulate the Set-Cookie header. + + A collection used to manipulate the Set-Cookie header. + + + + Gets or sets the Content-Length header. + + The Content-Length header. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Expires header. + + The Expires header. + + + + Gets or sets the E-Tag header. + + The E-Tag header. + + + + Gets or sets the owin.ResponseBody Stream. + + The owin.ResponseBody Stream. + + + + Registers for an event that fires when the response headers are sent. + + The callback method. + The callback state. + + + + Sets a 302 response status code and the Location header. + + The location where to redirect the client. + + + + Writes the given text to the response body stream using UTF-8. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + Accessors for headers, query, forms, etc. + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated values from the collection in their original format. + Returns null if the key is not present. + + + + + + + Used to mark which class in an assembly should be used for automatic startup. + + + + + Initializes a new instance of the class + + The startup class + + + + Initializes a new instance of the class + + A non-default configuration, e.g. staging. + The startup class + + + + Initializes a new instance of the class + + The startup class + Specifies which method to call + + + + Initializes a new instance of the class + + A non-default configuration, e.g. staging. + The startup class + Specifies which method to call + + + + A non-default configuration if any. e.g. Staging. + + + + + The startup class + + + + + The name of the configuration method + + + + + Used to create path based branches in your application pipeline. + The owin.RequestPathBase is not included in the evaluation, only owin.RequestPath. + Matching paths have the matching piece removed from owin.RequestPath and added to the owin.RequestPathBase. + + + + + Initializes a new instance of the class + + The normal pipeline taken for a negative match + + + + + Process an individual request. + + + + + + + Options for the Map middleware + + + + + The path to match + + + + + The branch taken for a positive match + + + + + Determines if the request should take a specific branch of the pipeline by passing the environment + to a user defined callback. + + + + + Initializes a new instance of the class + + The normal application pipeline + + + + + Process an individual request. + + + + + + + Options for the MapWhen middleware + + + + + The user callback that determines if the branch should be taken + + + + + The async user callback that determines if the branch should be taken + + + + + The branch taken for a positive match + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Create a new wrapper. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets a wrapper exposing request specific properties. + + A wrapper exposing request specific properties. + + + + Gets a wrapper exposing response specific properties. + + A wrapper exposing response specific properties. + + + + Gets the Authentication middleware functionality available on the current request. + + The authentication middleware functionality available on the current request. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets or sets the host.TraceOutput environment value. + + The host.TraceOutput TextWriter. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + Provides correct escaping for Path and PathBase values when needed to reconstruct a request or redirect URI string + + + + + Represents the empty path. This field is read-only. + + + + + Initialize the path string with a given value. This value must be in un-escaped format. Use + PathString.FromUriComponent(value) if you have a path value which is in an escaped format. + + The unescaped path to be assigned to the Value property. + + + + The unescaped path value + + + + + True if the path is not empty + + + + + Provides the path string escaped in a way which is correct for combining into the URI representation. + + The escaped path value + + + + Provides the path string escaped in a way which is correct for combining into the URI representation. + + The escaped path value + + + + Returns an PathString given the path as it is escaped in the URI format. The string MUST NOT contain any + value that is not a path. + + The escaped path as it appears in the URI format. + The resulting PathString + + + + Returns an PathString given the path as from a Uri object. Relative Uri objects are not supported. + + The Uri object + The resulting PathString + + + + Checks if this instance starts with or exactly matches the other instance. Only full segments are matched. + + + + + + + Checks if this instance starts with or exactly matches the other instance. Only full segments are matched. + + + Any remaining segments from this instance not included in the other instance. + + + + + Adds two PathString instances into a combined PathString value. + + The combined PathString value + + + + Combines a PathString and QueryString into the joined URI formatted string value. + + The joined URI formatted string value + + + + Compares this PathString value to another value. The default comparison is StringComparison.OrdinalIgnoreCase. + + The second PathString for comparison. + True if both PathString values are equal + + + + Compares this PathString value to another value using a specific StringComparison type + + The second PathString for comparison + The StringComparison type to use + True if both PathString values are equal + + + + Compares this PathString value to another value. The default comparison is StringComparison.OrdinalIgnoreCase. + + The second PathString for comparison. + True if both PathString values are equal + + + + Returns the hash code for the PathString value. The hash code is provided by the OrdinalIgnoreCase implementation. + + The hash code + + + + Operator call through to Equals + + The left parameter + The right parameter + True if both PathString values are equal + + + + Operator call through to Equals + + The left parameter + The right parameter + True if both PathString values are not equal + + + + Operator call through to Add + + The left parameter + The right parameter + The PathString combination of both values + + + + Operator call through to Add + + The left parameter + The right parameter + The PathString combination of both values + + + + Provides correct handling for QueryString value when needed to reconstruct a request or redirect URI string + + + + + Represents the empty query string. This field is read-only. + + + + + Initialize the query string with a given value. This value must be in escaped and delimited format without + a leading '?' character. + + The query string to be assigned to the Value property. + + + + Initialize a query string with a single given parameter name and value. The value is + + The unencoded parameter name + The unencoded parameter value + + + + The escaped query string without the leading '?' character + + + + + True if the query string is not empty + + + + + Provides the query string escaped in a way which is correct for combining into the URI representation. + A leading '?' character will be prepended unless the Value is null or empty. Characters which are potentially + dangerous are escaped. + + The query string value + + + + Provides the query string escaped in a way which is correct for combining into the URI representation. + A leading '?' character will be prepended unless the Value is null or empty. Characters which are potentially + dangerous are escaped. + + The query string value + + + + Returns an QueryString given the query as it is escaped in the URI format. The string MUST NOT contain any + value that is not a query. + + The escaped query as it appears in the URI format. + The resulting QueryString + + + + Returns an QueryString given the query as from a Uri object. Relative Uri objects are not supported. + + The Uri object + The resulting QueryString + + + + Indicates whether the current instance is equal to the other instance. + + + + + + + Indicates whether the current instance is equal to the other instance. + + + + + + + Returns the hash code for this instance. + + + + + + Compares the two instances for equality. + + + + + + + + Compares the two instances for inequality. + + + + + + + + Accessors for query, forms, etc. + + + + + Create a new wrapper + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated values from the collection in their original format. + Returns null if the key is not present. + + + + + + + + + + + + + + + + + + + A wrapper for the request Cookie header + + + + + Create a new wrapper + + + + + + Returns null rather than throwing KeyNotFoundException + + + + + + + + + + + + + + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Conversion delegate must take one parameter.. + + + + + Looks up a localized string similar to The cookie key and options are larger than ChunksSize, leaving no room for data.. + + + + + Looks up a localized string similar to The chunked cookie is incomplete. Only {0} of the expected {1} chunks were found, totaling {2} characters. A client size limit may have been exceeded.. + + + + + Looks up a localized string similar to The type '{0}' does not match any known middleware pattern.. + + + + + Looks up a localized string similar to The OWIN key 'server.OnSendingHeaders' is not available for this request.. + + + + + Looks up a localized string similar to The class '{0}' does not have a constructor taking {1} arguments.. + + + + + Looks up a localized string similar to No conversion available between {0} and {1}.. + + + + + Looks up a localized string similar to The path must not end with a '/'. + + + + + Looks up a localized string similar to The path must start with a '/' followed by one or more characters.. + + + + + Looks up a localized string similar to The path is required. + + + + + Looks up a localized string similar to The query string must start with a '?' unless null or empty.. + + + + + A standard implementation of IAppBuilder + + + + + Initializes a new instance of the the type. + + + + + + + + + + + + Contains arbitrary properties which may added, examined, and modified by + components during the startup sequence. + + Returns . + + + + Adds a middleware node to the OWIN function pipeline. The middleware are + invoked in the order they are added: the first middleware passed to Use will + be the outermost function, and the last middleware passed to Use will be the + innermost. + + + The middleware parameter determines which behavior is being chained into the + pipeline. + + If the middleware given to Use is a Delegate, then it will be invoked with the "next app" in + the chain as the first parameter. If the delegate takes more than the single argument, + then the additional values must be provided to Use in the args array. + + If the middleware given to Use is a Type, then the public constructor will be + invoked with the "next app" in the chain as the first parameter. The resulting object + must have a public Invoke method. If the object has constructors which take more than + the single "next app" argument, then additional values may be provided in the args array. + + + Any additional args passed to Use will be passed as additional values, following the "next app" + parameter, when the OWIN call pipeline is build. + + They are passed as additional parameters if the middleware parameter is a Delegate, or as additional + constructor arguments if the middle parameter is a Type. + + + The IAppBuilder itself is returned. This enables you to chain your use statements together. + + + + + The New method creates a new instance of an IAppBuilder. This is needed to create + a tree structure in your processing, rather than a linear pipeline. The new instance share the + same Properties, but will be created with a new, empty middleware list. + + To create a tangent pipeline you would first call New, followed by several calls to Use on + the new builder, ending with a call to Build on the new builder. The return value from Build + will be the entry-point to your tangent pipeline. This entry-point may now be added to the + main pipeline as an argument to a switching middleware, which will either call the tangent + pipeline or the "next app", based on something in the request. + + That said - all of that work is typically hidden by a middleware like Map, which will do that + for you. + + The new instance of the IAppBuilder implementation + + + + The Build is called at the point when all of the middleware should be chained + together. This is typically done by the hosting component which created the app builder, + and does not need to be called by the startup method if the IAppBuilder is passed in. + + + The Type argument indicates which calling convention should be returned, and + is typically typeof() for the OWIN + calling convention. + + + Returns an instance of the pipeline's entry point. This object may be safely cast to the + type which was provided + + + + + Simple object used by AppBuilder as seed OWIN callable if the + builder.Properties["builder.DefaultApp"] is not set + + + + + Extension methods for IAppBuilder. + + + + + The Build is called at the point when all of the middleware should be chained + together. May be called to build pipeline branches. + + + The request processing entry point for this section of the pipeline. + + + + The Build is called at the point when all of the middleware should be chained + together. May be called to build pipeline branches. + + The application signature. + + The request processing entry point for this section of the pipeline. + + + + Adds converters for adapting between disparate application signatures. + + + + + + + Adds converters for adapting between disparate application signatures. + + + + + + + + + A wrapper for the response Set-Cookie header + + + + + Create a new wrapper + + + + + + Add a new cookie and value + + + + + + + Add a new cookie + + + + + + + + Sets an expired cookie + + + + + + Sets an expired cookie + + + + + + + Indicates if the client should include a cookie on "same-site" or "cross-site" requests. + + + + + Indicates the client should send the cookie with every requests coming from any origin. + + + + + Indicates the client should send the cookie with "same-site" requests, and with "cross-site" top-level navigations. + + + + + Indicates the client should only send the cookie with "same-site" requests. + + + + + Acts as the return value from calls to the IAuthenticationManager's AuthenticeAsync methods. + + + + + Create an instance of the result object + + Assigned to Identity. May be null. + Assigned to Properties. Contains extra information carried along with the identity. + Assigned to Description. Contains information describing the authentication provider. + + + + Contains the claims that were authenticated by the given AuthenticationType. If the authentication + type was not successful the Identity property will be null. + + + + + Contains extra values that were provided with the original SignIn call. + + + + + Contains description properties for the middleware authentication type in general. Does not + vary per request. + + + + + Contains information describing an authentication provider. + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class + + + + + + Contains metadata about the authentication provider. + + + + + Gets or sets the name used to reference the authentication middleware instance. + + + + + Gets or sets the display name for the authentication provider. + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Exposes the security.SignOut environment value as a strong type. + + + + + + + + + + + + + + Dictionary used to store state values about the authentication session. + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class + + + + + + State values about the authentication session. + + + + + Gets or sets whether the authentication session is persisted across multiple requests. + + + + + Gets or sets the full path or absolute URI to be used as an http redirect response value. + + + + + Gets or sets the time at which the authentication ticket was issued. + + + + + Gets or sets the time at which the authentication ticket expires. + + + + + Gets or sets if refreshing the authentication session should be allowed. + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Initializes a new instance of the class + + + + + + + List of the authentication types that should send a challenge in the response. + + + + + Dictionary used to store state values about the authentication session. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Initializes a new instance of the class. + + + + + + + Initializes a new instance of the class. + + + + + + + The identity associated with the user sign in. + + + + + The security principal associated with the user sign in. + + + + + Dictionary used to store state values about the authentication session. + + + + + Exposes the security.SignOut and security.SignOutProperties environment values as a strong type. + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + + + + + + + List of the authentication types that should be revoked on sign out. + + + + + Dictionary used to store state values about the authentication session. + + + + + Used to interact with authentication middleware that have been chained in the pipeline + + + + + Returns the current user for the request + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Exposes the security.SignOut environment value as a strong type. + + + + + Lists all of the description data provided by authentication middleware that have been chained + + The authentication descriptions + + + + Lists the description data of all of the authentication middleware which are true for a given predicate + + A function provided by the caller which returns true for descriptions that should be in the returned list + The authentication descriptions + + + + Call back through the middleware to ask for a specific form of authentication to be performed + on the current request + + Identifies which middleware should respond to the request + for authentication. This value is compared to the middleware's Options.AuthenticationType property. + Returns an object with the results of the authentication. The AuthenticationResult.Identity + may be null if authentication failed. Even if the Identity property is null, there may still be + AuthenticationResult.properties and AuthenticationResult.Description information returned. + + + + Called to perform any number of authentication mechanisms on the current request. + + Identifies one or more middleware which should attempt to respond + Returns the AuthenticationResult information from the middleware which responded. The + order is determined by the order the middleware are in the pipeline. Latest added is first in the list. + + + + Add information into the response environment that will cause the authentication middleware to challenge + the caller to authenticate. This also changes the status code of the response to 401. The nature of that + challenge varies greatly, and ranges from adding a response header or changing the 401 status code to + a 302 redirect. + + Additional arbitrary values which may be used by particular authentication types. + Identify which middleware should perform their alterations on the + response. If the authenticationTypes is null or empty, that means the + AuthenticationMode.Active middleware should perform their alterations on the response. + + + + Add information into the response environment that will cause the authentication middleware to challenge + the caller to authenticate. This also changes the status code of the response to 401. The nature of that + challenge varies greatly, and ranges from adding a response header or changing the 401 status code to + a 302 redirect. + + Identify which middleware should perform their alterations on the + response. If the authenticationTypes is null or empty, that means the + AuthenticationMode.Active middleware should perform their alterations on the response. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to grant a claims-based identity to the recipient of the response. The exact mechanism of this may vary. + Examples include setting a cookie, to adding a fragment on the redirect url, or producing an OAuth2 + access code or token response. + + Contains additional properties the middleware are expected to persist along with + the claims. These values will be returned as the AuthenticateResult.properties collection when AuthenticateAsync + is called on subsequent requests. + Determines which claims are granted to the signed in user. The + ClaimsIdentity.AuthenticationType property is compared to the middleware's Options.AuthenticationType + value to determine which claims are granted by which middleware. The recommended use is to have a single + ClaimsIdentity which has the AuthenticationType matching a specific middleware. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to grant a claims-based identity to the recipient of the response. The exact mechanism of this may vary. + Examples include setting a cookie, to adding a fragment on the redirect url, or producing an OAuth2 + access code or token response. + + Determines which claims are granted to the signed in user. The + ClaimsIdentity.AuthenticationType property is compared to the middleware's Options.AuthenticationType + value to determine which claims are granted by which middleware. The recommended use is to have a single + ClaimsIdentity which has the AuthenticationType matching a specific middleware. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to revoke any claims identity associated the the caller. The exact method varies. + + Additional arbitrary values which may be used by particular authentication types. + Identifies which middleware should perform the work to sign out. + Multiple authentication types may be provided to clear out more than one cookie at a time, or to clear + cookies and redirect to an external single-sign out url. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to revoke any claims identity associated the the caller. The exact method varies. + + Identifies which middleware should perform the work to sign out. + Multiple authentication types may be provided to clear out more than one cookie at a time, or to clear + cookies and redirect to an external single-sign out url. + + + + Logging extension methods for IAppBuilder. + + + + + Sets the server.LoggerFactory in the Properties collection. + + + + + + + Retrieves the server.LoggerFactory from the Properties collection. + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Provides a default ILoggerFactory. + + + + + Provides a default ILoggerFactory based on System.Diagnostics.TraceSorce. + + + + + Provides an ILoggerFactory based on System.Diagnostics.TraceSource. + + + + + Initializes a new instance of the class. + + + Creates a factory named "Microsoft.Owin". + + + + + Initializes a new instance of the class. + + + + + + + Creates a new DiagnosticsLogger for the given component name. + + + + + + + A generic interface for logging. + + + + + Aggregates most logging patterns to a single method. This must be compatible with the Func representation in the OWIN environment. + + To check IsEnabled call WriteCore with only TraceEventType and check the return value, no event will be written. + + + + + + + + + + + Used to create logger instances of the given name. + + + + + Creates a new ILogger instance of the given name. + + + + + + + ILogger extension methods for common scenarios. + + + + + Checks if the given TraceEventType is enabled. + + + + + + + + Writes a verbose log message. + + + + + + + Writes an informational log message. + + + + + + + Writes a warning log message. + + + + + + + + Writes a warning log message. + + + + + + + + Writes an error log message. + + + + + + + Writes an error log message. + + + + + + + + Writes a critical log message. + + + + + + + Writes a critical log message. + + + + + + + + Contains the parts of an address. + + + + + Initializes a new instance. + + + + + + Initializes a new with the given parts. + + The scheme. + The host. + The port. + The path. + + + + Gets the internal dictionary for this collection. + + The internal dictionary for this collection. + + + + The uri scheme. + + + + + The uri host. + + + + + The uri port. + + + + + The uri path. + + + + + Creates a new + + A new + + + + Determines whether the specified object is equal to the current object. + + The other object. + true if the specified object is equal to the current object; otherwise, false. + + + + Determines whether the specified object is equal to the current object. + + The other object. + true if the specified object is equal to the current object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if left and right represent the same address; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if left and right do not represent the same address; otherwise, false. + + + + Gets a specified key and value from the underlying dictionary. + + + The key. + + + + + Sets a specified key and value in the underlying dictionary. + + The key. + The value. + + + + + Wraps the host.Addresses list. + + + + + Initializes a new instance of the class. + + The address list to set to the collection. + + + + Gets the underlying address list. + + The underlying address list. + + + + Gets the number of elements in the collection. + + The number of elements in the collection. + + + + Gets the item with the specified index from the collection. + + The index. + The item with the specified index. + + + + Adds the specified address to the collection. + + The address to add to the collection. + + + + Gets the enumerator that iterates through the collection. + + The enumerator that can be used to iterate through the collection. + + + + Gets the enumerator that iterates through the collection. + + The enumerator that can be used to iterate through the collection. + + + + Creates a new empty instance of . + + A new empty instance of . + + + + Determines whether the current collection is equal to the specified collection. + + The other collection to compare to the current collection. + true if current collection is equal to the specified collection; otherwise, false. + + + + Determines whether the current collection is equal to the specified object. + + The object to compare to the current collection. + true if current collection is equal to the specified object; otherwise, false. + + + + Gets the hash code for this instance. + + The hash code for this instance. + + + + Determines whether the first collection is equal to the second collection. + + The first collection to compare. + The second collection to compare. + true if both collections are equal; otherwise, false. + + + + Determines whether the first collection is not equal to the second collection. + + The first collection to compare. + The second collection to compare. + true if both collections are not equal; otherwise, false. + + + + A wrapper for the IDictionary. + + + + + Initializes a new instance of the class. + + + + + + Gets or sets the string value for “owin.Version”. + + The string value for “owin.Version”. + + + + Gets or sets the function delegate for “builder.DefaultApp”. + + The function delegate for “builder.DefaultApp”. + + + + Gets or sets the action delegate for “builder.AddSignatureConversion”. + + The action delegate for “builder.AddSignatureConversion”. + + + + Gets or sets the string value for “host.AppName”. + + The string value for “host.AppName”. + + + + Gets or sets the text writer for “host.TraceOutput”. + + The text writer for “host.TraceOutput”. + + + + Gets or sets the cancellation token for “host.OnAppDisposing”. + + The cancellation token for “host.OnAppDisposing”. + + + + Gets or sets the address collection for “host.Addresses”. + + The address collection for “host.Addresses”. + + + + Gets or sets the list of “server.Capabilities”. + + The list of “server.Capabilities”. + + + + Gets the underlying dictionary for this instance. + + The underlying dictionary for this instance. + + + + Determines whether the current AppProperties is equal to the specified AppProperties. + + The other AppProperties to compare with the current instance. + true if the current AppProperties is equal to the specified AppProperties; otherwise, false. + + + + Determines whether the current AppProperties is equal to the specified object. + + The object to compare with the current instance. + true if the current AppProperties is equal to the specified object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether the first AppPProperties is equal to the second AppProperties. + + The first AppPropeties to compare. + The second AppPropeties to compare. + true if both AppProperties are equal; otherwise, false. + + + + Determines whether the first AppPProperties is not equal to the second AppProperties. + + The first AppPropeties to compare. + The second AppPropeties to compare. + true if both AppProperties are not equal; otherwise, false. + + + + Gets the value from the dictionary with the specified key. + + The type of the value. + The key of the value to get. + The value with the specified key. + + + + Sets the value with the specified key. + + The key of the value to set. + The value to set. + This instance. + + + + Represents the capabilities for the builder properties. + + + + + Initializes a new instance of the class. + + + + + + The underling IDictionary + + + + + Gets or sets the string value for "sendfile.Version" + + the string value for "sendfile.Version" + + + + Gets or sets the websocket version. + + The websocket version. + + + + Initializes a new instance of the class. + + A new instance of the class. + + + + Determines whether the current Capabilities instance is equal to the specified Capabilities. + + The other Capabilities to compare with the current instance. + true if the specified object is equal to the current object; otherwise, false. + + + + Determines whether the current Capabilities is equal to the specified object. + + The object to compare with the current instance. + true if the current Capabilities is equal to the specified object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if the two specified instances of are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if the two specified instances of are not equal; otherwise, false. + + + + Gets the value from the dictionary with the specified key. + + The type of the value. + The key of the value to get. + The value with the specified key. + + + + Sets the given key and value in the underlying dictionary. + + The key of the value to set. + The value to set. + This instance. + + + + Options used to create a new cookie. + + + + + Creates a default cookie with a path of '/'. + + + + + Gets or sets the domain to associate the cookie with. + + The domain to associate the cookie with. + + + + Gets or sets the cookie path. + + The cookie path. + + + + Gets or sets the expiration date and time for the cookie. + + The expiration date and time for the cookie. + + + + Gets or sets a value that indicates whether to transmit the cookie using Secure Sockets Layer (SSL)—that is, over HTTPS only. + + true to transmit the cookie only over an SSL connection (HTTPS); otherwise, false. + + + + Gets or sets a value that indicates whether a cookie is accessible by client-side script. + + true if a cookie is accessible by client-side script; otherwise, false. + + + + Gets or sets a value that indicates on which requests client should or should not send cookie back to the server. + Set to null to do not include SameSite attribute at all. + + SameSite attribute value or null if attribute must not be set. + + + + Provides helper methods for processing requests. + + + + + Parses an HTTP form body. + + The HTTP form body to parse. + The object containing the parsed HTTP form body. + + + + An abstract base class for a standard middleware pattern. + + + + + Instantiates the middleware with an optional pointer to the next component. + + + + + + The optional next component. + + + + + Process an individual request. + + + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Create a new environment wrapper exposing request properties. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or set the HTTP method. + + The HTTP method. + + + + Gets or set the HTTP request scheme from owin.RequestScheme. + + The HTTP request scheme from owin.RequestScheme. + + + + Returns true if the owin.RequestScheme is https. + + true if this request is using https; otherwise, false. + + + + Gets or set the Host header. May include the port. + + The Host header. + + + + Gets or set the owin.RequestPathBase. + + The owin.RequestPathBase. + + + + Gets or set the request path from owin.RequestPath. + + The request path from owin.RequestPath. + + + + Gets or set the query string from owin.RequestQueryString. + + The query string from owin.RequestQueryString. + + + + Gets the query value collection parsed from owin.RequestQueryString. + + The query value collection parsed from owin.RequestQueryString. + + + + Gets the uniform resource identifier (URI) associated with the request. + + The uniform resource identifier (URI) associated with the request. + + + + Gets or set the owin.RequestProtocol. + + The owin.RequestProtocol. + + + + Gets the request headers. + + The request headers. + + + + Gets the collection of Cookies for this request. + + The collection of Cookies for this request. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Cache-Control header. + + The Cache-Control header. + + + + Gets or sets the Media-Type header. + + The Media-Type header. + + + + Gets or set the Accept header. + + The Accept header. + + + + Gets or set the owin.RequestBody Stream. + + The owin.RequestBody Stream. + + + + Gets or sets the cancellation token for the request. + + The cancellation token for the request. + + + + Gets or set the server.LocalIpAddress. + + The server.LocalIpAddress. + + + + Gets or set the server.LocalPort. + + The server.LocalPort. + + + + Gets or set the server.RemoteIpAddress. + + The server.RemoteIpAddress. + + + + Gets or set the server.RemotePort. + + The server.RemotePort. + + + + Gets or set the server.User. + + The server.User. + + + + Asynchronously reads and parses the request body as a form. + + The parsed form data. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Creates a new environment wrapper exposing response properties. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or sets the optional owin.ResponseStatusCode. + + The optional owin.ResponseStatusCode, or 200 if not set. + + + + Gets or sets the the optional owin.ResponseReasonPhrase. + + The the optional owin.ResponseReasonPhrase. + + + + Gets or sets the owin.ResponseProtocol. + + The owin.ResponseProtocol. + + + + Gets the response header collection. + + The response header collection. + + + + Gets a collection used to manipulate the Set-Cookie header. + + A collection used to manipulate the Set-Cookie header. + + + + Gets or sets the Content-Length header. + + The Content-Length header. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Expires header. + + The Expires header. + + + + Gets or sets the E-Tag header. + + The E-Tag header. + + + + Gets or sets the owin.ResponseBody Stream. + + The owin.ResponseBody Stream. + + + + Registers for an event that fires when the response headers are sent. + + The callback method. + The callback state. + + + + Sets a 302 response status code and the Location header. + + The location where to redirect the client. + + + + Writes the given text to the response body stream using UTF-8. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + +