Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Unified Diff: remoting/protocol/negotiating_authenticator.cc

Issue 12313085: Host-side third party token validation (Closed) Base URL: http://git.chromium.org/chromium/src.git@third_party_auth_protocol
Patch Set: Add missing parameters Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/negotiating_authenticator.cc
diff --git a/remoting/protocol/negotiating_authenticator.cc b/remoting/protocol/negotiating_authenticator.cc
index c6ecacb6a327dceae945ace9116139f3a77b0e60..07b85fb37e97e944cec377d5bb6903366e6b9bd8 100644
--- a/remoting/protocol/negotiating_authenticator.cc
+++ b/remoting/protocol/negotiating_authenticator.cc
@@ -49,7 +49,7 @@ scoped_ptr<Authenticator> NegotiatingAuthenticator::CreateForClient(
}
// static
-scoped_ptr<Authenticator> NegotiatingAuthenticator::CreateForHost(
+scoped_ptr<Authenticator> NegotiatingAuthenticator::CreateForHostSharedSecret(
const std::string& local_cert,
scoped_refptr<RsaKeyPair> key_pair,
const std::string& shared_secret_hash,
@@ -59,12 +59,35 @@ scoped_ptr<Authenticator> NegotiatingAuthenticator::CreateForHost(
result->local_cert_ = local_cert;
result->local_key_pair_ = key_pair;
result->shared_secret_hash_ = shared_secret_hash;
-
result->AddMethod(AuthenticationMethod::Spake2(hash_function));
return scoped_ptr<Authenticator>(result.Pass());
}
+// static
+scoped_ptr<Authenticator> NegotiatingAuthenticator::CreateForHostThirdParty(
+ const std::string& local_cert,
+ scoped_refptr<RsaKeyPair> key_pair,
+ const GURL& token_url,
+ const GURL& token_validation_url,
+ const std::string& local_jid,
+ const std::string& remote_jid,
+ ThirdPartyHostAuthenticator::TokenValidatorFactory*
+ token_validator_factory) {
+ scoped_ptr<NegotiatingAuthenticator> result(
+ new NegotiatingAuthenticator(WAITING_MESSAGE));
+ result->local_cert_ = local_cert;
+ result->local_key_pair_ = key_pair;
+ result->token_url_ = token_url;
+ result->token_validation_url_ = token_validation_url;
+ result->local_jid_ = local_jid;
+ result->remote_jid_ = remote_jid;
+ result->token_validator_factory_ = token_validator_factory;
+ result->AddMethod(AuthenticationMethod::ThirdParty());
+
+ return scoped_ptr<Authenticator>(result.Pass());
+}
+
NegotiatingAuthenticator::NegotiatingAuthenticator(
Authenticator::State initial_state)
: current_method_(AuthenticationMethod::Invalid()),
@@ -221,10 +244,20 @@ bool NegotiatingAuthenticator::is_host_side() const {
void NegotiatingAuthenticator::CreateAuthenticator(
Authenticator::State preferred_initial_state,
const base::Closure& resume_callback) {
+ DCHECK(current_method_.is_valid());
if (is_host_side()) {
- current_authenticator_ = V2Authenticator::CreateForHost(
- local_cert_, local_key_pair_, shared_secret_hash_,
- preferred_initial_state);
+ if (current_method_.type() == AuthenticationMethod::THIRD_PARTY) {
+ current_authenticator_.reset(new ThirdPartyHostAuthenticator(
+ local_cert_, local_key_pair_,
+ token_validator_factory_->CreateTokenValidator(
+ token_url_, token_validation_url_, local_key_pair_,
+ local_jid_, remote_jid_)));
+ } else {
+ DCHECK_EQ(current_method_.type(), AuthenticationMethod::SPAKE2);
+ current_authenticator_ = V2Authenticator::CreateForHost(
+ local_cert_, local_key_pair_, shared_secret_hash_,
+ preferred_initial_state);
+ }
resume_callback.Run();
} else {
fetch_secret_callback_.Run(base::Bind(

Powered by Google App Engine
This is Rietveld 408576698