我正在使用IdentityServer4和Asp.Net MVC(.net框架)。授权后,我的站点可以导航到Identity Server,但出现错误:客户端的授予类型无效。我该如何解决?给我这个组合的样本。非常感谢。
身份服务器客户端配置
{
"ClientId": "nfc",
"ClientName": ".net framework client",
// 5AF90EA2-CA6E-4AF9-AC1C-EAC72933D20D
"ClientSecrets": [ { "Value": "bBsQFRHNGCMB6W3EdybGe/lO8iOawFpeQ2ipC+nhGVM=" } ],
"AllowedGrantTypes": [ "client_credentials" ],
"AllowedScopes": [ "openid", "profile" ],
"AllowOfflineAccess": true,
"RedirectUris": [ "http://localhost:44398/signin-oidc" ],
"FrontChannelLogoutUris": [ "http://localhost:44398/signout-oidc" ],
"PostLogoutRedirectUris": [ "http://localhost:44398/signout-callback-oidc" ]
},
Asp.net客户端启动程序
[assembly: OwinStartup("ProductionConfiguration", typeof(NetFrameworkClient.Startup))]
namespace NetFrameworkClient
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions { });
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
AuthenticationType = "oidc",
SignInAsAuthenticationType = "Cookies",
Authority = "http://localhost:5000/",
RedirectUri = "http://localhost:44398/signin-oidc",
PostLogoutRedirectUri = "http://localhost:44398/signout-callback-oidc",
ClientId = "mvc",
ResponseType = "id_token",
Scope = "openid profile",
UseTokenLifetime = false,
RequireHttpsMetadata = false,
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = (context) =>
{
var identity = context.AuthenticationTicket.Identity;
var name = identity.Claims.FirstOrDefault(c => c.Type == identity.NameClaimType)?.Value;
return Task.FromResult(0);
}
}
});
}
}
}
在控制器上授权
[Authorize]
public ActionResult Index()
{
return View();
}
我得到的错误:对不起,出现了一个错误:authorized_client 客户的授权类型无效
答案 0 :(得分:0)
第一个步骤与该问题无关。它显示了另一个客户端"ClientId": "nfc"
的配置,它与第二个块mvc
的客户端无关。
假设您正在使用samples中的mvc
客户端,那么这可能是混合流程。在这种情况下,ResponseType应该为“代码id_token”。
ResponseType = "code id_token",
答案 1 :(得分:0)
它不起作用,因为在身份服务器配置中,客户端ID为“ nfc”,而在.NET应用程序的配置中,您将客户端ID指定为“ mvc”。
为使您的.net应用程序通过Identity Server授权,需要回传一个有效的客户端ID。
您可以在文档中找到更多信息:http://docs.identityserver.io/en/latest/quickstarts/1_client_credentials.html
希望有帮助!
答案 2 :(得分:0)
不确定是否对您有用,但对我有用:MVC 4.7.2具有“ GrantType”:“ hybrid” 所以我将IdentityServer4中的设置更改为“ AllowedGrantTypes”:[“ hybrid”]