我希望我的Identity Server 4服务器"MyAdditionalService"为某些已注册的客户端提供附加服务(例如)。他们将通过要在服务器上定义的自定义端点来使用该服务。
我正在考虑为该服务定义一个API(例如,名为“ myAdditionalService”),以便可以根据客户端的配置将对此类服务的访问权限授予客户端。但是,我不确定如何限制对端点的访问(MVC-Action方法),该端点仅允许被允许使用API的客户端(可能代表用户)。
我发现自己可以:
services.AddAuthorization(options =>
{
options.AddPolicy("MyAdditionalServicePolicy",
policy => policy.RequireClaim("scope",
"myAdditionalService"));
});
Run Code Online (Sandbox Code Playgroud)
并使用该属性[Authorize("MyAdditionalServicePolicy")]来装饰用于访问此类服务的操作方法。但是,我不知道服务器是否可以同时成为API,或者即使可能也可以。
我该如何实施?令牌服务还扮演着API的角色,这令人困惑,因为它可以保护对操作方法或端点的访问。
谢谢。
更新:
我的Web应用程序是一个IdentityServerWithAspNetIdentity,它已经使用了Asp.net核心身份的身份验证机制。就本例而言,我的Web应用程序向某些注册客户提供的附加服务是用户的Twitter朋友列表(以名为Twitter的控制器为模型,名为ImportFriends的操作),因此api被称为“ TwitterFriends”
根据以下回应的建议,我将Configure()方法修改为具有app.UseJwtBearerAuthentication()。我已经有app.UseIdentity(),app.UseIdentityServer()如下图所示:
app.UseIdentity();
app.UseIdentityServer();
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AuthenticationScheme = "Bearer",
Authority = Configuration["BaseUrl"],
Audience = "TwitterFriends",
RequireHttpsMetadata = false //TODO: make true, it is false for development only
});
// Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715
app.UseGoogleAuthentication(new GoogleOptions
{
AuthenticationScheme = "Google",
SignInScheme …Run Code Online (Sandbox Code Playgroud)