2

Identity Server 3を共有セキュリティ トークン サービスとして使用する ASP.NET MVC サイトがいくつかあります。

これらのサイトには、独自のローカル ログイン ページが必要です。現在、WS-Trust を使用して Identity Server 2 で認証していますが、Identity Server 3 で OpenID Connect を使用するようにアップグレードしたいと考えています。

OpenID Connect がこのようなアクティブ認証をサポートしている状況を見つけることができなかったため、代わりに OAuth2 リソース オーナー フローを追求しました。

これを解決するための私の最初の試みは次のとおりです。

Startup.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    TicketDataFormat = new AuthTicketDataFormat(),
    AuthenticationType = Auth.ssoAuthenticationType,
    LoginPath = new PathString("/account/login"),
    CookieName = ConfigurationManager.AppSettings["SsoCookieName"],
    CookiePath = "/",
    CookieDomain = ConfigurationManager.AppSettings["SsoCookieDomain"],
});

AccountController.Login (投稿) には次のものがあります。

var client = new TokenClient(
    ssoBaseUrl + "/connect/token",
    ssoClientId,
    ssoClientSecret);

var token = client.RequestResourceOwnerPasswordAsync(userName, password, ssoScope).Result;

var client = new HttpClient();
client.SetBearerToken(token.AccessToken);

var token = client.GetStringAsync(ssoBaseUrl + "/connect/userinfo").Result;

var jwt = new JwtSecurityToken(new JwtHeader(), JwtPayload.Deserialize(token));

var claims = jwt.Claims;

var id = new ClaimsIdentity(claims, Auth.ssoAuthenticationType, "email", "roles");
Request.GetOwinContext().Authentication.SignIn(id);

これは機能しますが...プロセスを簡素化するowinコンポーネントが必要であると考えました。たとえば、次の拡張メソッドを確認できますが、上記のものを置き換えるものはないようです。

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions {})

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions{})

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions{})

app.UseOpenIdConnectAuthentication(
    new Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationOptions{})

これらの拡張メソッドは、私たちの状況で機能するように最善を尽くしたにもかかわらず、トークンと userinfo エンドポイントに手動でアクセスし、起動時に Cookie 認証を行う上記の作業コードの必要性に取って代わるようには見えませんでした。

何か不足しているのでしょうか、それとも私たちのソリューションがこの状況に最適なものでしょうか...独自のログインページを使用したアクティブ認証ですが、それを実現するために最新のセキュリティ技術 (OpenID 接続 / OAuth2) を使用していますか?

4

1 に答える 1

3

リダイレクトなしでサインインする場合は、リソース所有者のパスワード付与フローを使用する必要があります。Identity Server の作成者による記事を参照してください。これは ID サーバー 2 用ですが、それでも役立つはずです。方法の例であるドキュメントからの情報もあります(IDサーバーの話では、リソース所有者パスワード資格付与と呼ばれます)。

そうは言っても、このフローはフレームワーク内にのみあります。これは、OAuth 2.0 仕様への貢献者の一部によって強制されているためです。実際には、OpenID/OAuth の考え方に反するものです。サイトを login.yoursite.com にリダイレクトするのは面倒に思えるかもしれませんが、実際にはそうすべきです。ユーザー エクスペリエンスに関して、職場の UX 担当者と話をしたところ (私は UX に懸念を抱いていたので)、彼は、それは現在 (少なくとも企業では) 十分に一般的なエクスペリエンスであり、ユーザーから差し引かれることはないと言っていました。リダイレクトのカバーの下で、すべての魔法が目に見えずに起こるのを体験してください。

リダイレクトを使用した Implicit フローを強くお勧めします。それはあなたがそれをどのようにやるべきかという明白で単純な冗談です.

于 2015-09-21T22:19:31.420 に答える