IdentityServer Topics(3)- 定义客户端

客户端指能够从你的 identityserver 请求令牌的应用程序。html

细节可能有所不一样,可是客户端一般有如下设置web

  • 一个惟一的客户端ID
  • 一个密钥(非必须)
  • 容许与令牌服务的交互(称为受权类型)
  • 身份或访问令牌被发送到的url(称为重定向URI)
  • 容许客户端访问的Scope列表(API资源)

在运行时,客户端经过IClientStore的实现来检索。 这容许从配置文件或数据库的任意数据源加载它们。 对于本文档,咱们将使用客户端存储的内存存储版本。 您能够经过AddInMemoryClients扩展方法在ConfigureServices中配置内存存储。数据库

一.定义Server到Server的客户端

在这种状况下,没有交互式用户 - 服务(也称为客户端)想要与API(aka范围)进行通讯:api

public class Clients
{
    public static IEnumerable<Client> Get()
    {
        return new List<Client>
        {
            new Client
            {
                ClientId = "service.client",
                ClientSecrets = { new Secret("secret".Sha256()) },

                AllowedGrantTypes = GrantTypes.ClientCredentials,
                AllowedScopes = { "api1", "api2.read_only" }
            }
        };
    }
}

二.定义 avaScript客户端(例如SPA)进行用户认证和受权访问和API

这个客户端使用implicit flow来从JavaScript请求身份和访问令牌:安全

var jsClient = new Client
{
    ClientId = "js",
    ClientName = "JavaScript Client",
    ClientUri = "http://identityserver.io",

    AllowedGrantTypes = GrantTypes.Implicit,
    AllowAccessTokensViaBrowser = true,

    RedirectUris =           { "http://localhost:7017/index.html" },
    PostLogoutRedirectUris = { "http://localhost:7017/index.html" },
    AllowedCorsOrigins =     { "http://localhost:7017" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email,

        "api1", "api2.read_only"
    }
};

三.定义服务器端Web应用程序(例如MVC)以进行使用验证和受权的API访问

交互式服务器端(或本地桌面/移动)应用程序使用混合流程(hybrid flow)。 这个流程为您提供了最好的安全性,由于访问令牌仅经过反向通道传输(并容许您访问刷新令牌):服务器

var mvcClient = new Client
{
    ClientId = "mvc",
    ClientName = "MVC Client",
    ClientUri = "http://identityserver.io",

    AllowedGrantTypes = GrantTypes.Hybrid,
    AllowOfflineAccess = true,
    ClientSecrets = { new Secret("secret".Sha256()) },

    RedirectUris =           { "http://localhost:21402/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:21402/" },
    FrontChannelLogoutUri =  "http://localhost:21402/signout-oidc",

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email,

        "api1", "api2.read_only"
    },
};
相关文章
相关标签/搜索