リソースの定義

システムで最初に定義するのは、保護したいリソースです。プロファイルデータやメールアドレス、APIへのアクセスなど、ユーザーの身元情報になります。

注釈

C#オブジェクトモデルを使用してリソースを定義することも、データストアからロードすることもできます。IResourceStoreこれらの低レベルの詳細に関する取引の実装。このドキュメントでは、インメモリ実装を使用しています。

アイデンティティリソースの定義

アイデンティティリソースは、ユーザーのID、名前、電子メールアドレスなどのデータです。アイデンティティーリソースには一意の名前があり、任意のクレームタイプを割り当てることができます。これらの主張は、ユーザーのIDトークンに含まれます。クライアントは、このscopeパラメータを使用してIDリソースへのアクセスを要求します。

OpenID Connect仕様では、いくつかの標準的なアイデンティティリソースが指定されています。最低要件は、ユーザーの一意のIDを発行するためのサポートを提供することです(サブジェクトIDとも呼ばれます)。これは、以下のような標準的なアイデンティティリソースを公開することによって行われopenidます。

public static IEnumerable<IdentityResource> GetIdentityResources()
{
    return new List<IdentityResource>
    {
        new IdentityResources.OpenId()
    };
}

IdentityResourcesのクラスは、仕様(OpenIDの、電子メール、プロフィール、電話、およびアドレス)で定義されたすべてのスコープをサポートしています。それらをすべてサポートしたい場合は、サポートされているIDリソースのリストに追加することができます。

public static IEnumerable<IdentityResource> GetIdentityResources()
{
    return new List<IdentityResource>
    {
        new IdentityResources.OpenId(),
        new IdentityResources.Email(),
        new IdentityResources.Profile(),
        new IdentityResources.Phone(),
        new IdentityResources.Address()
    };
}

カスタムIDリソースの定義

カスタムIDリソースを定義することもできます。新しいIdentityResourceクラスを作成し、名前とオプションで表示名と説明を指定し、このリソースが要求されたときにアイデンティティトークンに含めるユーザークレームを定義します。

public static IEnumerable<IdentityResource> GetIdentityResources()
{
    var customProfile = new IdentityResource(
        name: "custom.profile",
        displayName: "Custom profile",
        claimTypes: new[] { "name", "email", "status" });

    return new List<IdentityResource>
    {
        new IdentityResources.OpenId(),
        new IdentityResources.Profile(),
        customProfile
    };
}

アイデンティティリソース設定の詳細については、リファレンスセクションを参照してください。

APIリソースの定義

クライアントがAPIのアクセストークンを要求できるようにするには、APIリソースを定義する必要があります。

APIのトークンにアクセスするには、スコープとして登録する必要があります。今回スコープのタイプはResourceタイプです:

public static IEnumerable<ApiResource> GetApis()
{
    return new[]
    {
        // simple API with a single scope (in this case the scope name is the same as the api name)
        new ApiResource("api1", "Some API 1"),

        // expanded version if more control is needed
        new ApiResource
        {
            Name = "api2",

            // secret for using introspection endpoint
            ApiSecrets =
            {
                new Secret("secret".Sha256())
            },

            // include the following using claims in access token (in addition to subject id)
            UserClaims = { JwtClaimTypes.Name, JwtClaimTypes.Email },

            // this API defines two scopes
            Scopes =
            {
                new Scope()
                {
                    Name = "api2.full_access",
                    DisplayName = "Full access to API 2",
                },
                new Scope
                {
                    Name = "api2.read_only",
                    DisplayName = "Read only access to API 2"
                }
            }
        }
    };
}

APIリソース設定の詳細については、 参照 セクションを参照してください。

注釈

リソースによって定義されたユーザークレームは、 IProfileService の拡張性ポイントによって読み込まれます。