2013-06-25 3 views
4

Azure позволяет получить список зарегистрированных провайдеров удостоверений на получение:Как сопоставить стоимость требования поставщика удостоверения личности от поставщика удостоверения, зарегистрированного в Azure ACS?

https://YourNamespace.accesscontrol.windows.net/v2/metadata/IdentityProviders.js? 
    protocol=wsfederation& 
    realm=YourAppRealm& 
    reply_to=YourAppReturnURL& 
    version=1.0 

Когда знак пользователя в мы получаем требование поставщика идентичности, который идентифицирует, какой поставщик, который был использован для проверки подлинности.

Проблема заключается в том, что ресурс IdentityProvider.js не сообщает нам, какой поставщик удостоверения личности, который будет использоваться.

Например:

  • Windows Live ID использовать значение претензии uri:WindowsLiveID
  • Google использовать значение Претензии Google
  • ADFS поставщик идентичности может использовать значение претензии как http://adfs.mycompany.com/adfs/services/trust

Мне нужно иметь возможность сопоставлять значения идентификатора поставщика идентификационных данных и поставщиков идентификационных данных, перечисленных в IdentityProviders.js.

Причина этого заключается в том, что мне необходимо разрешить предоставление разрешений пользователям, указанным конкретным поставщиком удостоверений. Чтобы облегчить для пользователя, я хочу предоставить им список поставщиков идентификационных данных на выбор (то есть путем представления данных, полученных из IdentityProviders.js). Тем не менее, фактическое присвоение должно быть выполнено с использованием значения претензии поставщика идентификатора, поскольку это то, что идентифицирует провайдера.

Возможно ли это? Есть ли обходные пути?

Любая помощь будет оценена!

+0

Интересный вопрос! Просто задумываясь вслух - поскольку вы настраиваете поставщиков удостоверений, разрешенных через ACS (или, другими словами, произвольные поставщики удостоверений не разрешены), не можете ли вы сохранить это сопоставление в своей базе данных? Поэтому, если значение претензии возвращается как «uri: WindowsLiveID», вы можете сопоставить это с «Windows Live ID» в своей базе данных. –

+0

Да, это было бы возможно. Тем не менее, я разрабатываю платформу, на которой размещаются несколько отдельных экземпляров (базы данных), и я хочу свести к минимуму объем работы, которая должна быть выполнена для инициализации/настройки каждого экземпляра. Все/многие экземпляры используют одно и то же пространство имен ACS, поэтому было бы хорошо, если бы я мог добавить, например, новый поставщик удостоверений в ACS, не настраивая каждый экземпляр только для этой вещи сопоставления ... –

+0

Пожалуйста, посмотрите, помогает ли этот подход : http://stackoverflow.com/questions/15097275/passing-url-parameters-from-azure-acs-to-my-custom-identity-provider. –

ответ

1

IdentityProviders.js не предназначен для этой цели, поэтому у вас возникла эта проблема. Самое простое решение - жестко закодировать эти значения в вашем приложении. Если вы не хотите этого делать, вы можете получить эти значения через службу управления OData. Для каждого поставщика удостоверений, который вы найдете через службу управления, значение претензии IdentityProvider будет idp.Issuer.Name, а значение, указанное в IdentityProviders.js, будет idp.LoginLinkName (или idp.DisplayName, если LoginLinkName не указано).

0

Я попытался сделать это на прошлой неделе и не смог найти способ сопоставить значение в формуле с требованием к значению в IdentityProvider.js. Я приземлился на поиски конкретных ценностей. Единственное, что я могу предложить, это некоторый ресурс/код, который понимает отображение. Я просто искал для одной конкретной и приземлился вверх делает что-то вроде этого:

return (HttpContext.User.Identity as System.Security.Claims.ClaimsIdentity).Claims 
.First(x => x.Type == "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider").Value 
.Contains("Google") 

Я искал высоко и низко для данных, но не смог найти его. Если да, отправьте ответ, я также хотел бы знать

1

Вы можете настроить собственные значения для поставщика удостоверений, используя «Группа правил ->« выберите один »->« Добавить », затем оставьте« входной запрос ... »как любой/любой и настройте тип вывода с такими же тип пользовательских претензий для каждого поставщика удостоверений, например:

"http://mycustomtype.com/usethisclaimvalue" + "uri:WindowsLiveID" 

для Windows Live.

Затем вы можете использовать эту добавленную претензию в качестве источника для оператора коммутатора внутри приложения.

0

Как я решил это, создав пользовательское правило в ACS для каждого из моих провайдеров удостоверений, где я жестко закодировал выходное значение, чтобы соответствовать значению имени из IdentityProvider.js. Таким образом, жестко закодированные значения находятся в ACS и не являются специфичными для приложений, если у вас несколько приложений.

Вот пример того, как я установил правило. - http://screencast.com/t/jfDqX0cqu

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