layout: docs-default
身份提供器
IdentityServer支持通過第三方身份認(rèn)證器來認(rèn)證屹耐,第三方認(rèn)證機(jī)制必須封裝在katana認(rèn)證中間件中窍育。
katana本身帶有Google,Facebook,Twitter,Microsoft Accounts,WS-Federation和OpenID Connect認(rèn)證中間件。社區(qū)也提供了一些其它認(rèn)證中間件(如 Yahoo, LinkedIn, and SAML2p). 請看 完整列表.
要支持第三方登陸郭计,項(xiàng)目里需要增加一個帶IAppBuilder
和 a string
參數(shù)的方法灼芭。
public static void ConfigureIdentityProviders(IAppBuilder app, string signInAsType)
{
var google = new GoogleOAuth2AuthenticationOptions
{
AuthenticationType = "Google",
Caption = "Google",
SignInAsAuthenticationType = signInAsType,
ClientId = "...",
ClientSecret = "..."
};
app.UseGoogleAuthentication(google);
var fb = new FacebookAuthenticationOptions
{
AuthenticationType = "Facebook",
Caption = "Facebook",
SignInAsAuthenticationType = signInAsType,
AppId = "...",
AppSecret = "..."
};
app.UseFacebookAuthentication(fb);
var twitter = new TwitterAuthenticationOptions
{
AuthenticationType = "Twitter",
Caption = "Twitter",
SignInAsAuthenticationType = signInAsType,
ConsumerKey = "...",
ConsumerSecret = "..."
};
app.UseTwitterAuthentication(twitter);
}
解釋
-
AuthenticationType
必須是第三方登錄器的唯一標(biāo)識旬薯,這個值會保存在令牌的idp
聲明中。而且在認(rèn)證授權(quán)的過程中敛劝,同樣的值會用于身份提供器的預(yù)選擇中余爆,這個值會存在于acr_values
參數(shù)里 (詳細(xì)信息,請看 this ). 在客戶端配置中夸盟,也會使用這個值來限制客戶端中允許的第三方登陸龙屉。 -
Caption
用于在登陸界面顯示第三方登陸名字。如果Caption
是空的满俗,這個第三方登陸不會出現(xiàn)在登陸頁面转捕。但是可以通過登陸提示使用。 -
SignInAsAuthenticationType
必須填上我們傳入的參數(shù)signInAsType
必須把這個方法傳遞給AuthenticationOptions
的IdentityProviders
屬性里唆垃。
var idsrvOptions = new IdentityServerOptions
{
SiteName = "IdentityServer3",
Factory = factory,
SigningCertificate = Cert.Load(),
AuthenticationOptions = new AuthenticationOptions
{
IdentityProviders = ConfigureIdentityProviders
}
};
app.UseIdentityServer(idsrvOptions);
添加WS-Federation 第三方登陸
基于WS-Federation的第三方登陸可以和上面一樣的方式配置五芝。
出于向后兼容的原因,WS-Federation中間件會監(jiān)聽所有的請求并檢查她們帶有的token數(shù)據(jù)辕万。如果有多于一個WS-Federation中間件枢步,就需要顯示設(shè)置一個唯一的CallbackPath
屬性,這個屬性需要匹配IdP里的返回URL的渐尿。注意CallbackPath
必須是相對于根目錄醉途,不是相對于Identity Server模塊的目錄。比如:第三方登陸配置post auth tokens 到 http://mydomain.com/SubFolder/IdSrv/MyExternalProvider
砖茸, 然后 CallbackPath
應(yīng)該配置為 /SubFolder/IdSrv/MyExternalProvider
.
var adfs = new WsFederationAuthenticationOptions
{
AuthenticationType = "adfs",
Caption = "ADFS",
SignInAsAuthenticationType = signInAsType,
MetadataAddress = "https://adfs.leastprivilege.vm/federationmetadata/2007-06/federationmetadata.xml",
Wtrealm = "urn:idsrv3"
};
app.UseWsFederationAuthentication(adfs);