IdentityServer4 Ошибка, offline_access не разрешен для этого клиента - PullRequest
0 голосов
/ 22 февраля 2019

Я создал в конфигурации памяти с классом помощника,

public class InMemoryConfiguration
{
    public static IEnumerable<ApiResource> ApiResources()
    {
        return new[] {
                new ApiResource("socialnetwork", "Social Network")
            };
    }

    public static IEnumerable<Client> Clients()
    {
        return new[] {
                new Client
                {
                    ClientId = "socialnetwork",
                    ClientName = "SocialNetwork",
                    ClientSecrets = new [] { new Secret("secret".Sha256()) },
                     //Flow = Flows.ResourceOwner,
                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                    AllowedScopes = new [] { "socialnetwork", StandardScopes.OfflineAccess, StandardScopes.OpenId, StandardScopes.OfflineAccess },
                    Enabled = true

                }
            };
    }

    public static IEnumerable<TestUser> Users()
    {
        return new[] {
                new TestUser
                {
                    SubjectId = "1",
                    Username = "myUser@question.com",
                    Password = "password",
                }
            };
    }
}

Из моего приложения ASP.Net (отдельный проект) я отправляю запрос аутентификации,

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {

            try
            {
                if (!ModelState.IsValid)
                {
                    return View(model);
                }

                var client = new OAuth2Client(new Uri("http://localhost:61502/connect/token"), "socialnetwork", "secret");                
                var requestResponse = client.RequestAccessTokenUserName(model.Email, model.Password, "openid profile offline_access");

                var claims = new[]
                {
                    new Claim("access_token", requestResponse.AccessToken),
                    new Claim("refresh_token", requestResponse.RefreshToken)
                };

                var claimsIdentity = new ClaimsIdentity(claims,
                    DefaultAuthenticationTypes.ApplicationCookie);

                HttpContext.GetOwinContext().Authentication.SignIn(claimsIdentity);

                return RedirectToLocal(returnUrl);
            }
            catch (Exception ex)
            {
                    //Do my Error Handling
            }


        }

Теперь я вижу ошибку на консоли сервера,

offline_access не разрешен для этого клиента: socialnetwork

Я предоставил весь доступ к клиенту на allowe

d scope,
AllowedScopes = new [] { "socialnetwork", StandardScopes.OfflineAccess, StandardScopes.OpenId, StandardScopes.OfflineAccess }

Почему я получаю эту ошибку?Это связано с потоком или чем-то еще.

1 Ответ

0 голосов
/ 22 февраля 2019

Установите для свойства AllowOfflineAccess значение true в конфигурации клиента, а не добавляйте его в AllowedScopes:

           new Client
            {
                ClientId = "socialnetwork",
                ClientName = "SocialNetwork",
                ClientSecrets = new [] { new Secret("secret".Sha256()) },
                 //Flow = Flows.ResourceOwner,
                AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                AllowedScopes = new [] { "socialnetwork",StandardScopes.OpenId },
                Enabled = true,
                AllowOfflineAccess = true
            }
...