// Copyright 2019 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.

/// Defines the protocols used to interface with non-Fuchsia forms of identity,
/// such as OAuth and OpenID identity providers.
///
/// New identity providers or service providers may be added to the system by
/// implementing the server side of one or more of these protocols, the core
/// identity system will act as the client.
///
/// Clients wishing to acquire tokens should use the system token management
/// protocols in `fuchsia.identity.tokens` instead of depending on this library
/// directly.
library fuchsia.identity.external;
