2013-06-25 61 views
4

天青允許我們通過讓檢索註冊的身份提供者的列表:如何將身份提供者聲明值映射到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
  • 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(或如果未指定LoginLinkName,則爲idp.DisplayName)。

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" 

for Windows Live。

然後,您可以使用此添加的聲明作爲應用程序內的開關操作員的來源。

0

我解決這個問題的方法是在ACS中爲每個身份提供者創建一個自定義規則,其中我對輸出值進行硬編碼以匹配來自IdentityProvider.js的名稱值。這樣,硬編碼值在ACS中,並且在您有多個應用程序的情況下不是特定於應用程序的。

以下是我如何設置規則的示例。 - http://screencast.com/t/jfDqX0cqu

相關問題