1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_HTTP_HTTP_AUTH_MECHANISM_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_AUTH_MECHANISM_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_forward.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/http/http_auth.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker class AuthCredentials; 18*6777b538SAndroid Build Coastguard Worker class HttpAuthChallengeTokenizer; 19*6777b538SAndroid Build Coastguard Worker class HttpAuthPreferences; 20*6777b538SAndroid Build Coastguard Worker class NetLogWithSource; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE HttpAuthMechanism { 23*6777b538SAndroid Build Coastguard Worker public: 24*6777b538SAndroid Build Coastguard Worker virtual ~HttpAuthMechanism() = default; 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker virtual bool Init(const NetLogWithSource& net_log) = 0; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker // True if authentication needs the identity of the user from Chrome. 29*6777b538SAndroid Build Coastguard Worker virtual bool NeedsIdentity() const = 0; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // True if authentication can use explicit credentials included in the URL or 32*6777b538SAndroid Build Coastguard Worker // the user may be prompted for credentials. 33*6777b538SAndroid Build Coastguard Worker virtual bool AllowsExplicitCredentials() const = 0; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker // Parse a received Negotiate challenge. 36*6777b538SAndroid Build Coastguard Worker virtual HttpAuth::AuthorizationResult ParseChallenge( 37*6777b538SAndroid Build Coastguard Worker HttpAuthChallengeTokenizer* tok) = 0; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // Generates an authentication token. 40*6777b538SAndroid Build Coastguard Worker // 41*6777b538SAndroid Build Coastguard Worker // The return value is an error code. The authentication token will be 42*6777b538SAndroid Build Coastguard Worker // returned in |*auth_token|. If the result code is not |OK|, the value of 43*6777b538SAndroid Build Coastguard Worker // |*auth_token| is unspecified. 44*6777b538SAndroid Build Coastguard Worker // 45*6777b538SAndroid Build Coastguard Worker // If the operation cannot be completed synchronously, |ERR_IO_PENDING| will 46*6777b538SAndroid Build Coastguard Worker // be returned and the real result code will be passed to the completion 47*6777b538SAndroid Build Coastguard Worker // callback. Otherwise the result code is returned immediately from this 48*6777b538SAndroid Build Coastguard Worker // call. 49*6777b538SAndroid Build Coastguard Worker // 50*6777b538SAndroid Build Coastguard Worker // If the AndroidAuthNegotiate object is deleted before completion then the 51*6777b538SAndroid Build Coastguard Worker // callback will not be called. 52*6777b538SAndroid Build Coastguard Worker // 53*6777b538SAndroid Build Coastguard Worker // If no immediate result is returned then |auth_token| must remain valid 54*6777b538SAndroid Build Coastguard Worker // until the callback has been called. 55*6777b538SAndroid Build Coastguard Worker // 56*6777b538SAndroid Build Coastguard Worker // |spn| is the Service Principal Name of the server that the token is 57*6777b538SAndroid Build Coastguard Worker // being generated for. 58*6777b538SAndroid Build Coastguard Worker // 59*6777b538SAndroid Build Coastguard Worker // If this is the first round of a multiple round scheme, credentials are 60*6777b538SAndroid Build Coastguard Worker // obtained using |*credentials|. If |credentials| is nullptr, the default 61*6777b538SAndroid Build Coastguard Worker // credentials are used instead. 62*6777b538SAndroid Build Coastguard Worker virtual int GenerateAuthToken(const AuthCredentials* credentials, 63*6777b538SAndroid Build Coastguard Worker const std::string& spn, 64*6777b538SAndroid Build Coastguard Worker const std::string& channel_bindings, 65*6777b538SAndroid Build Coastguard Worker std::string* auth_token, 66*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& net_log, 67*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) = 0; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker // Sets the delegation type allowed on the Kerberos ticket. This allows 70*6777b538SAndroid Build Coastguard Worker // certain servers to act as the user, such as an IIS server retrieving data 71*6777b538SAndroid Build Coastguard Worker // from a Kerberized MSSQL server. 72*6777b538SAndroid Build Coastguard Worker virtual void SetDelegation(HttpAuth::DelegationType delegation_type) = 0; 73*6777b538SAndroid Build Coastguard Worker }; 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker // Factory is just a callback that returns a unique_ptr. 76*6777b538SAndroid Build Coastguard Worker using HttpAuthMechanismFactory = 77*6777b538SAndroid Build Coastguard Worker base::RepeatingCallback<std::unique_ptr<HttpAuthMechanism>( 78*6777b538SAndroid Build Coastguard Worker const HttpAuthPreferences*)>; 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker } // namespace net 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker #endif // NET_HTTP_HTTP_AUTH_MECHANISM_H_ 83