IdentityServer3,隐式流,如何获取令牌?

时间:2017-01-22 23:48:08

标签: oauth-2.0 identityserver3

我正在尝试访问使用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

任何想法我还有什么想法?

1 个答案:

答案 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