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