.NET Core 2.0 MVCでIdentity Server 4 HybridAndClientCredentialsを設定しようとしています。
しかし、エラーと戦っていますクライアントの無効な付与タイプ:暗黙的、
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials、
サンプルのクイックスタートをダウンロードしましたが、それは正常に機能していますが、コードで行の一部が見つからないことを見つけることができません。
デバッグ出力:
IdentityServer4.Validation.AuthorizeRequestValidator:
Error: Invalid grant type for client: implicit
{
"ClientId": "consultee",
"ClientName": "consultee Client test",
"RedirectUri": "http://consultee.mi.local:44352/signin-oidc",
"AllowedRedirectUris": [
"http://consultee.mi.local:44352/signin-oidc"
],
"SubjectId": "anonymous",
"ResponseType": "id_token",
"ResponseMode": "form_post",
"GrantType": "implicit",
"RequestedScopes": "",
"State": "CfDJ8KERs5ihv_5Ll9ddYi6Nj5lkLNGQptrJwHqbSD11g27zqVxPcKxLKvbMtd5ab5LPbV15yaCNlHlzpPgRQL4R2XSue8ka_fqLBWFfXad-sRNCyY03JxgL7HZDKDrph-G4hdvRRMvBtXUc0tq2tHd7ZGX7-djehs8aHD6-P_80UfFplHCYkvARV7I64Kb5ki4cFVmLE6G8EbWIUwir6HJpkgK1CbN_IuPtBTjaLZoBOEzpxWTRVaudsD4vZFxdTv4N51ufkn8jy7GPC0pf3xCGInQpA-FziHp681qmiWbCxlp9HuAIZBem-at9dNvC29yRBw4JbcoTSrjuHkq6G6gZtXVh1YuuQYIW9R4wklmlSEX4i8kxM8zJTog98Ce3OFsYnw",
"Raw": {
"client_id": "consultee",
"redirect_uri": "http://consultee.mi.local:44352/signin-oidc",
"response_type": "id_token",
"scope": "openid profile api1 offline_access",
"response_mode": "form_post",
"nonce": "636626718480261618.MDYwZjE0MjMtNzczMi00ZjQ4LTk0NWUtZjQ1ZDNjM2VjZTRhOWI0NWM0MjMtNGM3Ni00ZDA3LWIyZDctMDcwNTc3ZDU0NGYy",
"state": "CfDJ8KERs5ihv_5Ll9ddYi6Nj5lkLNGQptrJwHqbSD11g27zqVxPcKxLKvbMtd5ab5LPbV15yaCNlHlzpPgRQL4R2XSue8ka_fqLBWFfXad-sRNCyY03JxgL7HZDKDrph-G4hdvRRMvBtXUc0tq2tHd7ZGX7-djehs8aHD6-P_80UfFplHCYkvARV7I64Kb5ki4cFVmLE6G8EbWIUwir6HJpkgK1CbN_IuPtBTjaLZoBOEzpxWTRVaudsD4vZFxdTv4N51ufkn8jy7GPC0pf3xCGInQpA-FziHp681qmiWbCxlp9HuAIZBem-at9dNvC29yRBw4JbcoTSrjuHkq6G6gZtXVh1YuuQYIW9R4wklmlSEX4i8kxM8zJTog98Ce3OFsYnw",
"x-client-SKU": "ID_NET",
"x-client-ver": "2.1.4.0"
}
}
クライアント
new Client
{
ClientId = "consultee",
ClientName = "consultee Client test",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://consultee.mi.local:44352/signin-oidc" },
PostLogoutRedirectUris = { "http://consultee.mi.local:44352/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true,
AllowAccessTokensViaBrowser = true,
}
クライアントでのConfigurationService
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = Configuration["identityServerUri"];
options.RequireHttpsMetadata = false;
options.ClientId = "consultee";
options.ClientSecret = "secret";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("api1");
options.Scope.Add("offline_access");
});
}
IdServerのConfigurationService
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
services.AddAuthentication();
}
ログはその問題が何であるかを教えてくれます
エラー:クライアントの無効な付与タイプ:暗黙的
暗黙的なクライアントとしてログインしています。
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = Configuration["identityServerUri"];
options.RequireHttpsMetadata = false;
options.ClientId = "consultee";
options.ClientSecret = "secret";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("api1");
options.Scope.Add("offline_access");
});
IDサーバーでハイブリッドクライアントを構成しました
new Client
{
ClientId = "consultee",
ClientName = "consultee Client test",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://consultee.migrology.local:44352/signin-oidc" },
PostLogoutRedirectUris = { "http://consultee.migrology.local:44352/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true,
AllowAccessTokensViaBrowser = true,
}
そのため、サーバーはこれを許可しません。ハイブリッドとしてログインするようにコードを変更するか、クライアントを暗黙的なクライアントに変更する必要があります。
ハイブリッドに変更
暗黙的なログインをハイブリッドログインに変更するには、いくつかの変更が必要です。