将IdentityServer4.AccessTokenValidation连接到IdentityServer3

时间:2018-09-20 22:13:12

标签: c# .net-core identityserver4 identityserver3

我目前正在创建.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来为其登录。

任何人都能提供的帮助将不胜感激。

0 个答案:

没有答案