1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef REMOTING_PROTOCOL_THIRD_PARTY_HOST_AUTHENTICATOR_H_ 6#define REMOTING_PROTOCOL_THIRD_PARTY_HOST_AUTHENTICATOR_H_ 7 8#include <string> 9 10#include "base/callback.h" 11#include "base/memory/scoped_ptr.h" 12#include "remoting/protocol/third_party_authenticator_base.h" 13 14namespace remoting { 15 16class RsaKeyPair; 17 18namespace protocol { 19 20class TokenValidator; 21 22// Implements the host side of the third party authentication mechanism. 23// The host authenticator sends the |token_url| and |scope| obtained from the 24// |TokenValidator| to the client, and expects a |token| in response. 25// Once that token is received, it calls |TokenValidator| asynchronously to 26// validate it, and exchange it for a |shared_secret|. Once the |TokenValidator| 27// returns, the host uses the |shared_secret| to create an underlying 28// |V2Authenticator|, which is used to establish the encrypted connection. 29class ThirdPartyHostAuthenticator : public ThirdPartyAuthenticatorBase { 30 public: 31 // Creates a third-party host authenticator. |local_cert| and |key_pair| are 32 // used by the underlying V2Authenticator to create the SSL channels. 33 // |token_validator| contains the token parameters to be sent to the client 34 // and is used to obtain the shared secret. 35 ThirdPartyHostAuthenticator(const std::string& local_cert, 36 scoped_refptr<RsaKeyPair> key_pair, 37 scoped_ptr<TokenValidator> token_validator); 38 virtual ~ThirdPartyHostAuthenticator(); 39 40 protected: 41 // ThirdPartyAuthenticator implementation. 42 virtual void ProcessTokenMessage( 43 const buzz::XmlElement* message, 44 const base::Closure& resume_callback) OVERRIDE; 45 virtual void AddTokenElements(buzz::XmlElement* message) OVERRIDE; 46 47 private: 48 void OnThirdPartyTokenValidated(const buzz::XmlElement* message, 49 const base::Closure& resume_callback, 50 const std::string& shared_secret); 51 52 std::string local_cert_; 53 scoped_refptr<RsaKeyPair> key_pair_; 54 scoped_ptr<TokenValidator> token_validator_; 55 56 DISALLOW_COPY_AND_ASSIGN(ThirdPartyHostAuthenticator); 57}; 58 59} // namespace protocol 60} // namespace remoting 61 62#endif // REMOTING_PROTOCOL_THIRD_PARTY_HOST_AUTHENTICATOR_H_ 63