2017-02-17 45 views
0

Я довольно новичок в пространстве OAuth2 и OpenID Connect, и я пытаюсь создать API и защитить его с помощью IdentityServer4. Я создал следующие ресурсы: -Identityserver4 ApiResource и IdentityResource с одинаковыми именами

public static class MyResources 
{ 
    public static IEnumerable<IdentityResource> GetIdentityResources() 
    { 
     return new List<IdentityResource>() 
     { 
      new IdentityResources.OpenId(), 
      new IdentityResources.Profile(), 
      new IdentityResource("someResource", "some description", new [] { "something" }) 
     }; 
    } 

    public static IEnumerable<ApiResource> GetApiResources() 
    { 
     return new List<ApiResource>() 
     { 
      new ApiResource("someResource", "some other description", new [] { "somethingElse" }) 
     }; 
    } 
} 

Так как вы можете видеть, что у меня есть IdentityResource под названием someResource и также ApiResource с тем же именем называется someResource. И, наконец, в моей конфигурации Клиентов, я определил клиент Scopes следующих , который включает someResource для доступа

public static class Clients 
{ 
    public static IEnumerable<Client> GetClients() 
    { 
     return new[] 
     { 
      new Client 
      { 
       ClientId = "MyClientId", 
       ClientName = "My Client Name", 
       ClientSecrets = new List<Secret> { new Secret("secret".Sha256()) }, 
       AllowedGrantTypes = GrantTypes.HybridAndClientCredentials, 
       RedirectUris = { "http://localhost:5002/signin-oidc" }, 
       PostLogoutRedirectUris = { "http://localhost:5002" }, 
       AllowedScopes = new List<string> 
       { 
        StandardScopes.OpenId, 
        StandardScopes.Profile, 
        "someResource" 
       }, 
       RequireConsent = true, 
       AllowOfflineAccess = true 
      } 
     }; 
    } 
} 

При запуске приложения, это то, что я вижу на экране согласия

ID4 Consent Screen

Как вы можете видеть на скриншоте, экран согласия предоставляет как IdentityResource, так и ApiResource, называемый someResource. Является ли этот дизайн преднамеренным, и вы должны тщательно планировать именование ресурсов, чтобы не иметь конфликта. Я ожидал бы, что 2 разных ресурса с таким же именем будут вызывать как минимум ошибку времени выполнения, поскольку области действия клиента могут различаться только по имени, а не по типу ресурса. Что ты думаешь?

ответ

0

Имена областей должны быть уникальными.

Если вы используете «упрощенный» способ создания ресурсов - неявно создаются области с одинаковым именем.

IOW - не делаем этого;)