// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.auth;

/// A unique identifier for an account with some service provider, comprised of
/// the identity of the service provider and an account identity supplied by that
/// service provider.
///
// TODO(jsankey): Integrate other parts of the AuthProvider API with this
// domain-based identity. In general multiple auth_provider_types may exist for
// the same identity_provider_domain.
struct ServiceProviderAccount {
    /// The primary domain of the identity provider, such as "www.google.com".
    string identity_provider_domain;

    /// User identifier as supplied by the identity provider. Some identity
    /// providers send verified email address as the identifier, some send an
    /// opaque string.
    string user_profile_id;
};
