IdentityServer4を使用していて、トークンの作成時にカスタムデフォルトクレームをCLIENT
に追加しようとしています。これは暗黙的なフローを使用し、IProfileService
を以下のように使用すると可能です。IdentityServer4:Client_Credentialのクライアントプリンシパルにカスタムデフォルトクレームを追加する
public class MyProfileService : IProfileService
{
public MyProfileService()
{
}
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var claims = new List<Claim>
{
new Claim("DemoClaimType", "DemoClaimValue")
};
context.IssuedClaims = claims;
return Task.FromResult(0);
}
public Task IsActiveAsync(IsActiveContext context)
{
context.IsActive = true;
return Task.FromResult(0);
}
}
そして、私のスタートアップで
services.AddIdentityServer()
.AddProfileService<MyProfileService>()
それはcannot request OpenID scopes in client credentials flow
ようですので、これはclient_credential granttypeと私のクライアントでは動作しません。名前のようにIprofileserviceはIdentity
のために働いていますOpenIdスコープがプロファイルのようなリソースは有効です。なぜなら、client_credentialグラントタイプGetProfileDataAsync
がプロファイルスコープを要求できないからです。
よう
new Client
{
ClientId = "myclient",
ClientName = "My Client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets = {new Secret("secret".Sha256())},
AllowedScopes = new List<string> {"api"},
AllowOfflineAccess = true,
//I Don't want to do this
Claims = new List<Claim>
{
new Claim("type","value")
}
}
の下にクライアントオブジェクトにそれらを追加することなく、クライアントと私はトークンにクレームを注入する方法が必要がないユーザーでのみ働いているので、私はので、私は上記を望んでいませんこのクレームをデータベース内のclient_claimsの一部にすることは望ましくありません。私はトークン要求でそれをオンザフライで作成する必要があります。私の質問がより明確になることを願っています。
を 'IProfileService'取得者を
ICustomTokenRequestValidator
を拡張して、Startup.cs徹底的な依存性の注入で私のクラスを含める必要がありましたことを行うために'access_token'が生成されたときに呼び出されます - それはそれにクレームを追加するために使用されます。 – moritzg
また、次のように 'IProfileService'を追加しています:' Services.AddTransient(); '(スタートアップ> ConfigureServices内)があなたの問題でしょうか? –
moritzg
'AddProfileService'は正しいメソッドです。 – Mardoxx