Class DigestScheme

  • All Implemented Interfaces:
    java.io.Serializable, AuthScheme, ContextAwareAuthScheme

    public class DigestScheme
    extends RFC2617Scheme
    Digest authentication scheme as defined in RFC 2617. Both MD5 (default) and MD5-sess are supported. Currently only qop=auth or no qop is supported. qop=auth-int is unsupported. If auth and auth-int are provided, auth is used.

    Since the digest username is included as clear text in the generated Authentication header, the charset of the username must be compatible with the HTTP element charset used by the connection.

    Since:
    4.0
    See Also:
    Serialized Form
    • Field Detail

      • HEXADECIMAL

        private static final char[] HEXADECIMAL
        Hexa values used when creating 32 character long digest in HTTP DigestScheme in case of authentication.
        See Also:
        encode(byte[])
      • complete

        private boolean complete
        Whether the digest authentication process is complete
      • lastNonce

        private java.lang.String lastNonce
      • nounceCount

        private long nounceCount
      • cnonce

        private java.lang.String cnonce
      • a1

        private java.lang.String a1
      • a2

        private java.lang.String a2
    • Constructor Detail

      • DigestScheme

        public DigestScheme​(java.nio.charset.Charset credentialsCharset)
        Since:
        4.3
      • DigestScheme

        @Deprecated
        public DigestScheme​(ChallengeState challengeState)
        Deprecated.
        (4.3) do not use.
        Creates an instance of DigestScheme with the given challenge state.
        Since:
        4.2
      • DigestScheme

        public DigestScheme()
    • Method Detail

      • isComplete

        public boolean isComplete()
        Tests if the Digest authentication process has been completed.
        Returns:
        true if Digest authorization has been processed, false otherwise.
      • getSchemeName

        public java.lang.String getSchemeName()
        Returns textual designation of the digest authentication scheme.
        Returns:
        digest
      • isConnectionBased

        public boolean isConnectionBased()
        Returns false. Digest authentication scheme is request based.
        Returns:
        false.
      • overrideParamter

        public void overrideParamter​(java.lang.String name,
                                     java.lang.String value)
      • authenticate

        public org.apache.http.Header authenticate​(Credentials credentials,
                                                   org.apache.http.HttpRequest request,
                                                   org.apache.http.protocol.HttpContext context)
                                            throws AuthenticationException
        Produces a digest authorization string for the given set of Credentials, method name and URI.
        Specified by:
        authenticate in interface ContextAwareAuthScheme
        Overrides:
        authenticate in class AuthSchemeBase
        Parameters:
        credentials - A set of credentials to be used for athentication
        request - The request being authenticated
        context - HTTP context
        Returns:
        a digest authorization string
        Throws:
        InvalidCredentialsException - if authentication credentials are not valid or not applicable for this authentication scheme
        AuthenticationException - if authorization string cannot be generated due to an authentication failure
      • createDigestHeader

        private org.apache.http.Header createDigestHeader​(Credentials credentials,
                                                          org.apache.http.HttpRequest request)
                                                   throws AuthenticationException
        Creates digest-response header as defined in RFC2617.
        Parameters:
        credentials - User credentials
        Returns:
        The digest-response as String.
        Throws:
        AuthenticationException
      • getCnonce

        java.lang.String getCnonce()
      • getA1

        java.lang.String getA1()
      • getA2

        java.lang.String getA2()
      • encode

        static java.lang.String encode​(byte[] binaryData)
        Encodes the 128 bit (16 bytes) MD5 digest into a 32 characters long String according to RFC 2617.
        Parameters:
        binaryData - array containing the digest
        Returns:
        encoded MD5, or null if encoding failed
      • createCnonce

        public static java.lang.String createCnonce()
        Creates a random cnonce value based on the current time.
        Returns:
        The cnonce value as String.