Я использую сервер идентификации 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"
});
}
Я уже получил токен доступа с сервера авторизации, но когда я получаю доступ к разрешению на создание, пользователь не авторизован, что-то не так с моим кодом? Большое спасибо.