注册多个RedirectUris

时间:2016-08-18 19:10:21

标签: openiddict

有时客户端有多个重定向uri。我们希望能够注册多个RedirectUri值。如果有的话,我们如何做到这一点?

context.Applications.Add(new OpenIddictApplication
{
    ClientId = "zamboni-app",
    ClientSecret = Crypto.HashPassword("secret_secret_secret"),
    DisplayName = "Zamboni app",
    LogoutRedirectUri = "http://zamboni-app.azurewebsites.net/signout-oidc",
    RedirectUri = "http://zamboni-app.azurewebsites.net/signin-oidc",
    Type = OpenIddictConstants.ClientTypes.Public
});

2 个答案:

答案 0 :(得分:1)

OpenIddict故意不支持指定多个redirect_uri,以阻止您为所有应用重复使用相同的客户端注册(阅读client_id)。

答案 1 :(得分:0)

当需要从多个域访问客户端应用程序时,我也有此要求(大多数OAuth提供商都允许这样做)。

您可以通过创建从OpenIddictApplicationManager<TApplication>派生并覆盖ValidateRedirectUriAsync方法的新类来为客户端应用程序允许多个重定向URI:

public sealed class MyApplicationManager : OpenIddictApplicationManager<MyApplication>
{
    /// <inheritdoc />
    public override Task<bool> ValidateRedirectUriAsync(MyApplication application, string address, CancellationToken cancellationToken)
    {
        var validRedirectUris = application.RedirectUris.Select(u => u.Uri);
        if(validRedirectUris.Contains(address, StringComparer.Ordinal))
            return Task.FromResult(true);
        return Task.FromResult(false);
    }
}

在此示例中,MyApplication有一个附加字段,其中包含重定向URI,这可能是与数据库中另一个实体的关系。

然后一定要像这样注册这个应用程序管理器:

services.AddOpenIddict<MyApplication, OpenIdAuthorization, OpenIdScope, OpenIdToken>()
    .AddApplicationManager<MyApplicationManager>();