注册多个 RedirectUris
Register multiple RedirectUris
有时一个客户端有多个重定向 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
});
编辑: 对多个 redirect_uri
的支持已添加到 OpenIddict 的 RTM 版本中。我最初的建议仍然适用:请不要使用此功能来创建跨越多个 domains/security 边界的“大型客户”。
OpenIddict 故意不支持指定多个 redirect_uri
,以阻止您为所有应用重复使用相同的客户端注册(阅读 client_id
)。
当需要从多个域访问客户端应用程序时,我也有此要求(这是大多数 OAuth 提供商允许这样做的原因)。
您可以通过创建从 OpenIddictApplicationManager<TApplication>
派生的新 class 并覆盖 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>();
有时一个客户端有多个重定向 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
});
编辑: 对多个 redirect_uri
的支持已添加到 OpenIddict 的 RTM 版本中。我最初的建议仍然适用:请不要使用此功能来创建跨越多个 domains/security 边界的“大型客户”。
OpenIddict 故意不支持指定多个 redirect_uri
,以阻止您为所有应用重复使用相同的客户端注册(阅读 client_id
)。
当需要从多个域访问客户端应用程序时,我也有此要求(这是大多数 OAuth 提供商允许这样做的原因)。
您可以通过创建从 OpenIddictApplicationManager<TApplication>
派生的新 class 并覆盖 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>();