2016-08-18 3 views
2

Иногда клиент имеет более одного перенаправления uri. Мы хотим иметь возможность регистрировать несколько значений RedirectUri. Как, если мы вообще это делаем?Зарегистрировать несколько RedirectUris

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 
}); 

ответ

1

Указание нескольких redirect_uri намеренно не поддерживается OpenIddict, чтобы удержать вас от повторного использования той же регистрации клиента (чтение client_id) для всех ваших приложений.

+0

Как мы имели в виду для обработки клиентского приложения, двигаясь из одного домена в другой, если мы не можем иметь и в качестве действительного URI переадресации? (Мы хотим проверить, что все работает над новым доменом, прежде чем все перейдут к его использованию). – Lukazoid

+0

@ Lukazoid, вы не можете ответить на него только потому, что не одобряете дизайнерское решение и ожидаете ответа на свой вопрос. – Pinpoint

+0

Все в порядке, я сам разобрался в решении. Я отклонил ваш ответ, потому что я не счел это полезным. По крайней мере, я оставил комментарий, объясняющий, почему я не чувствую, что это полезный ответ. Мне жаль, что ты так лично взял мой нижний план. – Lukazoid

0

У меня также было требование для этого, когда клиентское приложение должно быть доступно из нескольких доменов (есть причина, по которой большинство поставщиков OAuth это допускают).

Вы можете позволить несколько URI, переадресации для клиентского приложения, создавая новый класс, производный от OpenIddictApplicationManager<TApplication> и перекрывая ValidateRedirectUriAsync метод:

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>(); 
+1

'есть причина, по которой большинство поставщиков OAuth допускают это, является необоснованным утверждением. Крупные поставщики, такие как Facebook, Reddit, Dropbox или Box, не позволяют вам регистрировать несколько обратных вызовов. И да, есть причина для этого. – Pinpoint

+0

Но facebook допускает множественные URI переадресации, я еще не смотрел на остальных. – Lukazoid

+0

Только если вы используете расширенные параметры. В противном случае допускается только один адрес. – Pinpoint

Смежные вопросы