3

有时一个客户端有多个重定向 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
});
4

2 回答 2

2

编辑:redirect_uri在 OpenIddict 的 RTM 版本中添加了对多个的支持。我最初的建议仍然适用:请不要使用此功能创建跨越多个域/安全边界的“大型客户端”。


redirect_uriOpenIddict 故意不支持指定多个,以阻止您client_id为所有应用程序重用相同的客户端注册(读取)。

于 2016-08-18T19:18:44.190 回答
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>();
于 2017-02-13T11:15:46.023 回答