Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Asp Net Core: Login wird nicht erkannt wegen JWT Authentity

27.07.2018 (👁10266)


Problem:

der User wird beim Aufruf einer Webseite nicht erkannt, obwohl das Login erfolgreich war

Betrifft: Asp.Net Core MVC Anwendung mit WebApi JWT JavaWebToken

Ursache:

Wenn man in einer Asp.Net Core 2 MVC Anwendung einen REST Web api Controller einbaut, dann muss man zusätzlich einen JWT Authentity einbauen in der Startup

Ursache:

in der startup.cs wird die Authentifizierung über Java-Tokens eingefügt, damit sich externe Programme ohne User-Login auf die WebApi Daten abrufen können

Lösung:

Die Reihenfolge der Einbindung in der Startup spielt eine Rolle

-1. Erst den JWT Authentifizierung einbauen

-2. Dann die Standard Microsoft Identity Authentifizierung einbauen

//----< 1: JWT-Token >----

//*reference: www.blinkingcaret.com

services.AddAuthentication(options =>

{

    options.DefaultAuthenticateScheme = "JwtBearer";

    options.DefaultChallengeScheme = "JwtBearer";

})

 

.AddJwtBearer("JwtBearer", jwtBearerOptions =>

{

    jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters

    {

..

    };

});

//----</ JWT-Token >----

 

//--< 2: Identity >--

services.AddIdentity<ApplicationUserIdentityRole>(config =>

{

..

})

.AddEntityFrameworkStores<ApplicationDbContext>()

.AddDefaultTokenProviders();

//--</ Identity >--

Login Erkennung

Normalerweise wird beim Aufruf einer Seite der aktuelle User in der Views/Shared/_loginPartial.cshtml abgefragt und erkannt

Hierzu wird der SignInManger und UserManager eingebettet und die Abfrage über UserManager.GetUserID(User) ermittelt.

@inject SignInManager<ApplicationUser> SignInManager

@inject UserManager<ApplicationUser> UserManager

..

            string sIDUserGuid = UserManager.GetUserId(User);

 

 

_loginPartial.cshtml

@using Microsoft.AspNetCore.Identity

@using Freelance.Models

@using Freelance.Data

 

@inject SignInManager<ApplicationUser> SignInManager

@inject UserManager<ApplicationUser> UserManager

 

 

<div style="margin-right:0px;margin-left:0px">

    <a id="btnMenuLogin" href="javascript:void();" onclick="menu_openclose_Login(); ">

        @{

            //--------< Get User-Defined Information >--------

            //< get UserGuid >

            string sIDUserGuid = UserManager.GetUserId(User);

            //</ get UserGuid >

 

            if (sIDUserGuid == null)

            {

                //----< Not logged in >----

                <img src="~/_images/ico/User_Login.png" alt="Login Register as User" style="padding:0;height:35px" />

                //----</ Not logged in >----

            }

            else

Defektes Startup:

// This method gets called by the runtime. Use this method to add services to the container.

 public void ConfigureServices(IServiceCollection services)

 {

     //-----------< ConfigureServices()  >-----------

     services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Website_Constants.Connectionstring));

 

     //--< Facebook Api >--

 

     //--< Identity >--

     services.AddIdentity<ApplicationUserIdentityRole>(config =>

     {

         //< send Register Email >

         //*prevents registered users from logging in until their email is confirmed.

         config.SignIn.RequireConfirmedEmail = true;

         //</ send Register Email >

     })

     .AddEntityFrameworkStores<ApplicationDbContext>()

     .AddDefaultTokenProviders();

     //--</ Identity >--

 

     //----< JWT-Token >----

     //*reference: www.blinkingcaret.com

     services.AddAuthentication(options =>

     {

         options.DefaultAuthenticateScheme = "JwtBearer";

         options.DefaultChallengeScheme = "JwtBearer";

     })

 

     .AddJwtBearer("JwtBearer", jwtBearerOptions =>

     {

         jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters

         {

             ValidateIssuerSigningKey = true,

             IssuerSigningKey = Website_Constants._secretKey,

 

             ValidateIssuer = true,

             ValidIssuer = "website_x",

 

             ValidateAudience = true,

             ValidAudience = "webclients_x",

 

             ValidateLifetime = true//validate the expiration and not before values in the token

 

             ClockSkew = TimeSpan.FromMinutes(5) //5 minute tolerance for the expiration date

         };

     });

     //----</ JWT-Token >----

 

     services.AddAuthentication().AddFacebook(facebookOptions =>

     {

         facebookOptions.AppId = Website_Constants.fp_appID;

         facebookOptions.AppSecret = Website_Constants.fp_secret;

     });

     //--</ Facebook Api >--

 

 

     // Add application services.

     services.AddTransient<IEmailSenderEmailSender>();

 

     var optRewrite = new RewriteOptions()

     .AddRedirectToHttpsPermanent();

 

 

     services.AddMvc();

 

     //-----------</ ConfigureServices() >-----------

 }