我目前正在创建.net core 2.1解决方案,以将我们的团队代码迁移到一起,并确保我们使用的是最新版本的库。但是,这部分工作必须稍后进行,例如使用IdentityServer3的身份服务器。
鉴于IdentityServer4已存在,但我们还不能完全做到这一点,我正在尝试使用IdentityServer4.AccessTokenValidation启动新的Web api项目并运行,并将其连接到已安装的IdentityServer3。 / p>
现在,现有的Web api项目甚至都不再使用IdentityServer3.AccessTokenValidation,他们将自定义属性和通信写入IdentityServer3以处理令牌/范围认证。从我所见,这与核心最佳实践背道而驰,核心不再只是在做范围,而是在做具有范围的策略...
新的NET Core Web API已在startup.cs中进行了设置:
//ConfigureServers(IServiceCollection serviceCollection)
var mvcBuilder = serviceCollection.AddMvcCore();
mvcBuilder.AddApiExplorer();
mvcBuilder.AddJsonFormatters();
mvcBuilder.AddAuthorization();
mvcBuilder.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//...
var athentication = serviceCollection.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme);
authentication.AddIdentityServerAuthentication(options => {
options.Authority = "https://www.example.com/api/connect/identity";
options.ApiName = null;
options.ApiSecret = null;
options.RequireHttpsMetadata = false;
options.LegacyAudienceValidation = true;
});
serviceCollection.AddAuthorization(options => {
options.AddPolicy("TempPrivaleges", builder => {
builder.RequireScope("TempScope");
};
});
//Configure(IApplicationBuilder app, IHostingEnvironment env)
app.UseHttpsRedirection();
app.UseMvc();
app.UseAuthentication();
控制器的设置如下:
[Authorize(Policy="TempPrivaleges")]
[Produces("application/json")]
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public ActionResult<string> SayHello()
{
return Ok("Hello");
}
[HttpGet]
public ActionResult<IEnumerable<string>> Test()
{
return Ok(new string[] { "Test1", "Test2" });
}
}
但是,当我使用SOAP UI来获取令牌时,然后使用上述令牌针对我的API发出请求,
我用于获取令牌的URL类似于:https://www.example.com/api/connect/identity/connect/token
现有的API使用以下内容进行令牌验证:https://www.example.com/api/connect/identity/connect/accesstokenvalidation
我不清楚的关键是Startup.cs中的API和API Secret。我不确定这些值应该是什么。当现有API调用验证时,它们不会提供任何此类信息。我也不确定我是否正确设置了授权地址。
我也找不到任何有关在API端打开登录以查看其试图执行的操作的文档。不幸的是,我无权访问正在运行的IdentityServer3来为其登录。
任何人都能提供的帮助将不胜感激。