// 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.
type ServiceProviderAccount = struct {
    /// The primary domain of the identity provider, such as "www.google.com".
    identity_provider_domain string;

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