2016-12-21 20 views
1

私はOWIN/Katana経由でUmbracoが消費するOAuth認証サーバとして私の会社のウェブサイトを使って概念実証を試みています。すべてのOAuth配管はうまく機能しているようですが、Umbracoは外部IDをローカルIDに変換していません。 Umbracoのバックエンドにログインする代わりに、ユーザーはログインページに戻ります。 OAuthフローが完了した後の唯一の変更は、Umbracoが長い暗号化文字列を含むUMB_EXTLOGINクッキーを作成したことです。外部OAuth IDをUmbracoのローカルIDに変換するにはどうすればよいですか?

ローカルID(Umbracoバックエンドログインページのユーザー名とパスワード)を使用して直接ログインすると、UMB_UCONTEXT、UMB_UPDCHK、XSRF-TOKEN、XSRF-Vの4つのCookieが作成されます。私は、外部のアイデンティティーをローカルのものに変換するものがないと思っていますが、それが何であるか分かりません。

Startup.Auth.cs

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.ConfigureBackOfficeMyCompanyAuth(Properties.Settings.Default.ClientId, Properties.Settings.Default.ClientSecret); 
    } 
} 

UmbracoMyCompanyAuthExtensions.cs

public static class UmbracoMyCompanyAuthExtensions 
{ 
    public static void ConfigureBackOfficeMyCompanyAuth(this IAppBuilder app, string clientId, string clientSecret, 
     string caption = "My Company", string style = "btn-mycompany", string icon = "fa-rebel") 
    { 
     var options = new MyCompanyAuthenticationOptions 
     { 
      ClientId = clientId, 
      ClientSecret = clientSecret, 
      SignInAsAuthenticationType = Constants.Security.BackOfficeExternalAuthenticationType, 
      Provider = new MyCompanyAuthenticationProvider(), 
      CallbackPath = new PathString("/MyCompanySignIn") 
     }; 

     options.ForUmbracoBackOffice(style, icon); 
     options.Caption = caption; 
     app.UseMyCompanyAuthentication(options); 
    } 
} 

MyCompanyAuthenticationExtension.cs

public static class MyCompanyAuthenticationExtensions 
{ 
    public static IAppBuilder UseMyCompanyAuthentication(this IAppBuilder app, MyCompanyAuthenticationOptions options) 
    { 
     if (app == null) 
     { 
      throw new ArgumentNullException("app"); 
     } 
     if (options == null) 
     { 
      throw new ArgumentNullException("options"); 
     } 
     app.Use(typeof(MyCompanyAuthenticationMiddleware), new object[] { app, options }); 
     return app; 
    } 

    public static IAppBuilder UseMyCompanyAuthentication(this IAppBuilder app, string clientId, string clientSecret) 
    { 
     MyCompanyAuthenticationOptions options = new MyCompanyAuthenticationOptions 
     { 
      ClientId = clientId, 
      ClientSecret = clientSecret 
     }; 
     return app.UseMyCompanyAuthentication(options); 
    } 
} 

私のカスタム実装AuthenticationHandler<T>.AuthenticateCoreAsync()は、以下のクレームとプロパティを持つAuthenticationTicketを返します。

クレーム

  1. GIVENNAME =マイファーストネーム
  2. FamilyNameで=私の姓
  3. 名=私のフルネーム
  4. メール=メールアドレス

プロパティ

  1. .redirect =/umbraco/

答えて

0

いけないのFacebookのOAuthを使用して、手元にあるが、過去の経験から、準備ができて任意のコードを持って、あなたがOAuthのオブジェクト(変換し、いずれかまたは両方、基本的に独自のロジックに配線する必要がありますユーザ)をumbracoに変換する。

ユーザーが初めて(電子メールでチェックして)これを行うと、新しいユーザーが作成され、その後のすべてのログインでumbracoユーザーが電子メールで取得され、コードでログインされます。これは、バックエンドユーザーとフロントエンドメンバーの両方で同じでした。

0

だから、多くの車輪の回転の後、私はそれを最終的に考え出した。結果のClaimsIdentityにNameIdentifierクレームが含まれていませんでした。 OAuthのミドルウェアには、電子メールアドレスを値として使用してその要求が含まれていて、作業を開始しました。

外部ログイン時に外部アカウントとローカルアカウントを自動リンクする場合は、hereがうまくいきました。

関連する問題