我正在尝试访问使用IdentityServer3的令牌URL。服务器配置方式如下:
var options = new IdentityServerOptions
{
LoggingOptions = new LoggingOptions
{
WebApiDiagnosticsIsVerbose = true,
EnableWebApiDiagnostics = true,
EnableHttpLogging = true,
EnableKatanaLogging= true
},
Factory = new IdentityServerServiceFactory()
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(Scopes.Get())
.UseInMemoryUsers(Users.Get()),
RequireSsl = false,
EnableWelcomePage = false,
};
app.UseIdentityServer(options);
客户端配置:
new Client
{
Enabled = true,
ClientName = "JS Client",
ClientId = "js",
Flow = Flows.Implicit,
RedirectUris = new List<string>
{
"http://localhost:56522"
},
AllowedCorsOrigins = new List<string>
{
"http://localhost:56522"
},
AllowAccessToAllScopes = true
}
尝试将以下HTTP请求发送到令牌端点:
Content-Type:application/x-www-form-urlencoded
grant_type:password
redirect_uri:http://localhost:56522
client_id:js
username:bob
password:secret
scope:api
我收到无效的客户端错误消息并显示日志: Action返回'IdentityServer3.Core.Results.TokenErrorResult'',Operation = ReflectedHttpActionDescriptor.ExecuteAsync
任何想法我还有什么想法?
答案 0 :(得分:2)
您的请求使用password
授权类型,即OAuth资源所有者流,但您的客户端配置为使用OpenID Connect Implicit流。
更改客户端配置以使用资源所有者流,或将您的请求更改为有效的OpenID Connect请求。
例如:GET /connect/authorize?client_id=js&scope=openid api&response_type=id_token token&redirect_uri=http://localhost:56522&state=abc&nonce=xyz
。这将带您进入登录页面。
或者更好的是,使用@Jenan建议的JavaScipt库,例如为您处理这些请求的IdentityModel oidc-client。