Почему пользователь не авторизован, претензия пользователя не содержит ничего - PullRequest
0 голосов
/ 22 января 2020

Я использую сервер идентификации 3 (. Net Framework 4.7.1) для встроенного сервера авторизации. Код конфигурации моего сервера здесь:

public static class Clients
{
    public static IEnumerable<Client> Get()
    {
        return new List<Client>
        {
            new Client
            {
                ClientName = "auth client",
                ClientId = "99F1DB94-47FE-4374-8FE2-EA47FA9A9C4B",

                Enabled = true,
                Flow = Flows.ResourceOwner,
                AccessTokenType = AccessTokenType.Jwt,

                ClientSecrets = new List<Secret>
                {
                    new Secret("21B5F798-BE55-42BC-8AA8-0025B903DC3B".Sha256())
                },

                AllowedScopes = new List<string>
                {
                    "AuthApi"
                }
            }
        };
    }
}

 public static class Scopes
{
    public static IEnumerable<Scope> Get()
    {
        var scopes= new List<Scope>
        {
            new Scope
            {
                Enabled = true,
                Name = "AuthApi",
                Type = ScopeType.Resource
            }
        };

        scopes.AddRange(StandardScopes.All);

        return scopes;
    }
}

public static class Users
{
    public static List<InMemoryUser> Get()
    {
        return new List<InMemoryUser>
        {
            new InMemoryUser
            {
                Username = "user",
                Password = "password",
                Subject = "1",
                Claims = new List<Claim>
                {
                    new Claim(Constants.ClaimTypes.Role, "Admin")
                }
            }
        };
    }
}

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map("", coreApp =>
            {
                coreApp.UseIdentityServer(new IdentityServerOptions
                {
                    SiteName = "Identity Server",
                    SigningCertificate = Cert.Load(),
                    Factory = new IdentityServerServiceFactory()
                            .UseInMemoryClients(Clients.Get())
                            .UseInMemoryScopes(Scopes.Get())
                            .UseInMemoryUsers(Users.Get()),
                    RequireSsl = true
                });
            });
    }
}

и код моего веб-API (. Net Framework 4.7.1):

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = "https://localhost:44398",
            ValidationMode = ValidationMode.Local,
            RequiredScopes = new[] { "AuthApi" }
        });

        var config = new HttpConfiguration();

        config.MapHttpAttributeRoutes();

        config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        };

        app.UseWebApi(config);
    }
}

[HttpPost]
    [Route("CreatePermission")]
    public IHttpActionResult CreatePermission()
    {
        var caller = User as ClaimsPrincipal;

        return Json(new
        {
            message = "Welcome to my API!",
            client = caller != null && caller.Identity.IsAuthenticated ? caller.FindFirst("client_id").Value : "unknown"
        });
    }

Я уже получил токен доступа с сервера авторизации, но когда я получаю доступ к разрешению на создание, пользователь не авторизован, что-то не так с моим кодом? Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...