Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication ASP.NET 5 OpenIdConnect刷新\u令牌_Authentication_Asp.net Core_Openid Connect_Aspnet Contrib - Fatal编程技术网

Authentication ASP.NET 5 OpenIdConnect刷新\u令牌

Authentication ASP.NET 5 OpenIdConnect刷新\u令牌,authentication,asp.net-core,openid-connect,aspnet-contrib,Authentication,Asp.net Core,Openid Connect,Aspnet Contrib,我正在尝试使用刷新\u令牌创建令牌 POST http://localhost:50000/connect/token HTTP/1.1 User-Agent: Fiddler Host: localhost:50000 Content-Length: 61 Content-Type: application/x-www-form-urlencoded grant_type = password & username = my_username & password = my_

我正在尝试使用
刷新\u令牌创建
令牌

POST http://localhost:50000/connect/token HTTP/1.1
User-Agent: Fiddler
Host: localhost:50000
Content-Length: 61
Content-Type: application/x-www-form-urlencoded

grant_type = password & username = my_username & password = my_password & scope = offline_access
后面是@Shaun Luttin的回复

public sealed class AuthorizationProvider : OpenIdConnectServerProvider
{
    public override Task ValidateClientAuthentication(
        ValidateClientAuthenticationContext context)
    {
        // Since there's only one application and since it's a public client
        // (i.e a client that cannot keep its credentials private), call Skipped()
        // to inform the server the request should be accepted without 
        // enforcing client authentication.
        context.Skipped();

        return Task.FromResult(0);
    }

    public override Task GrantResourceOwnerCredentials(
        GrantResourceOwnerCredentialsContext context)
    {
        // Validate the credentials here (e.g using ASP.NET Identity).
        // You can call Rejected() with an error code/description to reject
        // the request and return a message to the caller.

        var identity =
            new ClaimsIdentity(OpenIdConnectServerDefaults.AuthenticationScheme);
        identity.AddClaim(ClaimTypes.NameIdentifier, "todo");

        // By default, claims are not serialized in the access and identity tokens.
        // Use the overload taking a "destination" to make sure your claims
        // are correctly inserted in the appropriate tokens.
        identity.AddClaim("urn:customclaim", "value", "token id_token");

        var ticket = new AuthenticationTicket(
            new ClaimsPrincipal(identity),
            new AuthenticationProperties(),
            context.Options.AuthenticationScheme);

        // Call SetResources with the list of resource servers
        // the access token should be issued for.
        ticket.SetResources(new[] { "resource_server_1" });

        // Call SetScopes with the list of scopes you want to grant
        // (specify offline_access to issue a refresh token).
        ticket.SetScopes(new[] { "profile", "offline_access" });

        context.Validated(ticket);

        return Task.FromResult<object>(null);
    }
}
我得到这样的代币

POST http://localhost:50000/connect/token HTTP/1.1
User-Agent: Fiddler
Host: localhost:50000
Content-Length: 61
Content-Type: application/x-www-form-urlencoded

grant_type = password & username = my_username & password = my_password
{
  "resource": "resource_server_1",
  "scope": "profile offline_access",
  "token_type": "bearer",
  "access_token": "eyJh...W2rA",
  "expires_in": "3600"
}

其工作正常,但没有
refresh\u令牌
property init。我怎么才能得到呢?

不知什么原因,我不知道

ticket.SetScopes(new[] { "profile", "offline_access" });
手动操作不起作用,因此我删除了这一行,并将
scope
参数添加到我的请求头中,现在我得到了带有
refresh\u令牌的响应

POST http://localhost:50000/connect/token HTTP/1.1
User-Agent: Fiddler
Host: localhost:50000
Content-Length: 61
Content-Type: application/x-www-form-urlencoded

grant_type = password & username = my_username & password = my_password & scope = offline_access
所以现在的反应是

{
  "resource": "resource_server_1",
  "scope": "profile offline_access",
  "token_type": "bearer",
  "access_token": "eyJh...W2rA",
  "refresh_token": "CfDJ8OV0Bu....AoUWPE"
  "expires_in": "3600"
}

是的,这是因为在beta4中,如果令牌请求中不存在
offline_访问
作用域(即使您明确授予它),那么它将被忽略。这是我在beta5夜间构建中放松的东西。