0

MVC Webアプリケーション(Asp.net C# - AngularJSを前面に使用)を開発しています。 現在、ユーザは、ユーザ名&のパスワードまたはoauthプロバイダ(googleやFacebookなど)を使用してサイトにログインできます。同じプロジェクトのMVCとネイティブモバイル(Web API)でソーシャル(facebook、googleなど)経由でログイン

私たちは、asp.net web-apiを使用するネイティブモバイルアプリケーションを開発しました。

ユーザーは、モバイルアプリとウェブサイトと同じ資格情報を使用してログインできるようにします。

これを実行するには、両方のプロジェクト(web-api &ウェブアプリケーション)がASP.Net IDと同じDBを使用しています。たとえば、ユーザがユーザ名&パスワードを使用してアカウントを作成した場合、ユーザは両方のプラットフォームでログインできます。

問題は外部プロバイダ(Facebook、Googleなど)です。ユーザーがWebビューでアカウントを作成すると、IDは特定のプロバイダーキー(AspNetUserLoginsテーブル)でユーザーをDBに保存します。 そしてときに、ユーザーのログイン(または登録)モバイルアプリを使用して、私は唯一のユーザートークンを持っている、と私は、ユーザーがログインする方法がわからない

その後、私はこの記事を見つけた:。 WebApi ASP.NET Identity Facebook login

私は自分のユーザIDを取得し、AspNetUserLoginsテーブルに保存しますが、使用しているとき(モバイルログインから)ユーザートークンを使用して

  1. :今だけ私は2つの問題を持って、私が必要としました正確に何を説明し

    Webアプリケーションは別のユーザーIDを保存しますが、実際にはプロバイダキーと呼ばれます。

  2. (軽微な問題)上記のリンクコードを使用して何らかの理由で私はユーザーの電子メールを取得するのではなく、自分のFacebookトークンとFacebookユーザーIDのみを取得します。

は*私はネイティブのアプローチを使用したいと私はアプリがユーザーのFacebook/Googleのネイティブアプリケーションを使用したいので、モバイルアプリ上でWebビューを使用することはできませんのでご注意ください。 *これも読んでください:ASP.NET Identity in Microservice Architectureそれは動作しませんでした。

ありがとうございます! シャウル

+0

注意たとえあなたがスコープでそれを求めても、あなたはそれを手に入れません。 – VRPF

答えて

1

OK、私は答えを考え出し:

  1. は、ユーザーがそれぞれのFacebookアプリのための特定のユーザーIDを持っすなわち、プロバイダキーは、実際にアプリ特定のユーザーIDであることが判明します。あなたはstartup.auth.csでスコープでそれのための特定の要求を追加する必要があります電子メールを取得するために

  2. :ユーザーがその設定を変更する場合は共有しないようにすること

    var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
    { 
        AppId = DEFINITIONS.FACEBOOK_ID, 
        AppSecret = DEFINITIONS.FACEBOOK_SECRET, 
    
        Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider() 
        { 
         // This is for saving the data as user claims 
         OnAuthenticated = (context) => 
         { 
          context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, null, "Facebook")); 
          context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:email", context.Email, null, "Facebook")); 
          return Task.FromResult(0); 
         } 
        } 
    
    }; 
    // This will help you get the Email 
    facebookAuthenticationOptions.Scope.Add("email"); 
        app.UseFacebookAuthentication(facebookAuthenticationOptions); 
    
関連する問題