リソースの定義¶
システムで最初に定義するのは、保護したいリソースです。プロファイルデータやメールアドレス、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 の拡張性ポイントによって読み込まれます。