DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • ASP.NET Web API: Benefits and Why to Choose It
  • Leveraging Salesforce Using Spring Boot
  • GET, POST, PUT, DELETE: Choosing HTTP Verbs in a Real .NET Core Web API, Not Just by the Textbook
  • Delegated Transport, Forked Authorization: Where Chat and AI-Agent Integrations Actually Break

Trending

  • When Production Stops Moving: Running Claude Code Across a Distributed Enterprise Integration Team
  • Why Successful Tech Transformation Starts With Clarity
  • Designing the Runtime Layer for Stateful AI Agents: Where Agent Substrate Fits
  • Stop Writing Database Migration Scripts: Declarative Schema Sync for Java

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Software Design and Architecture
  3. Integration
  4. Token-Based Authentication in Angular 6 With Web API

Token-Based Authentication in Angular 6 With Web API

Want to learn how to perform token-based authentication? Check out this tutorial on using OWIN Middleware and a Web API in Angular 6.

By 
Deep Gautam
·
Sep. 25, 18 · Tutorial
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
76.1K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

In this tutorial, I will show how to perform token-based authentication with OWIN Middleware and a Web API that has the same integration with Angular 6.

If you prefer to watch a video on how to do this, here is the link for same, explaining token-based authentication with a Web API and Angular 6.


Now, let us get started! Here are the basic steps:

  1. Angular 6 login and logout with the Web API using token-based authentication
  2. Design login form in Angular 6 application
  3. Web API token-based authentication using OWIN and ASP.Net Identity.

Let us start with the Web API:

Create a Web API Project

You will do this by creating a class, as shown below:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespaceDeepCart.Models
{
publicclassUser
{
[Key]
publicint Id { get; set; }

[Required, MinLength(3), MaxLength(50)]
publicstring UserName { get; set; }

[Required, MinLength(3), MaxLength(50)]
publicstring Password { get; set; }
}
}


Now, let's build the project.

Install the Following Packages in Your Web API Project

Microsoft.Owin

Microsoft.Owin.Host.SystemWeb

Microsoft.Owin.Security.OAuth

Microsoft.Owin.Security

Microsoft.AspNet.Identity.Owin

Microsoft.Owin.Cors


These packages are the important packages to give support for the OWIN Middleware and OAuth.

In this tutorial, we will be talking about bearer authentication.

Write a Provider Class

using Microsoft.Owin.Security;
using Microsoft.Owin.Security.OAuth;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Web.Http.Cors;
using DeepCart.Models;
using System;

namespaceDeepCart.DtProvider
{
// This tutorial is by DotNet Techy YouTube Channel
// For more info about channel You can visit this link
// [](https://www.youtube.com/c/dotnettechy)

[EnableCors(origins: "*", headers: "*", methods: "*")]
publicclassDotNetTechyAuthServerProvider : OAuthAuthorizationServerProvider
{

publicoverrideasync Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated(); 
}

publicoverrideasync Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);

context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

using (var db = new DeepCartContext())
{
if (db != null)
{
var user = db.Registrations.ToList();
if (user != null)
{
if (!string.IsNullOrEmpty(user.Where(u => u.UserName == context.UserName && u.Password == context.Password).FirstOrDefault().UserName))
{
var currentUser = user.Where(u => u.UserName == context.UserName && u.Password == context.Password).FirstOrDefault();
identity.AddClaim(new Claim("Role", currentUser.Role));
identity.AddClaim(new Claim("Id",Convert.ToString( currentUser.Id)));

var props = new AuthenticationProperties(new Dictionary<string, string>
{
{
"DisplayName", context.UserName
},
{
"Role", currentUser.Role
}
});

var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
}
else
{
context.SetError("invalid_grant", "Provided username and password is not matching, Please retry.");
context.Rejected();
}
}
}
else
{
context.SetError("invalid_grant", "Provided username and password is not matching, Please retry.");
context.Rejected();
}
return;
}
}

}
}


This DotNetTechyAuthServerProvider class is inherited from the OAuthAuthorizationServerProvider, and this comes from Microsoft.Owin.Security.OAuth.

It has two basic methods that need to be overridden in order to validate the username and password from your database and return the token if the username and password are valid. The first method is theValidateClientAuthentication, and the second method is the GrantResourceOwnerCredentials. You will better understand this by looking at the code.

Create a Startup Class

using DeepCart.DtProvider;

using Microsoft.Owin;

using Microsoft.Owin.Cors;

using Microsoft.Owin.Security.OAuth;

using Owin;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Http;

[assembly: OwinStartup(typeof(DeepCart.Startup))]

namespace DeepCart

{

// This tutorial is by DotNet Techy YouTube Channel

// For more info about channel You can visit this link

//

public class Startup

{

public void ConfigureAuth(IAppBuilder app)

{

app.UseCors(CorsOptions.AllowAll);
var OAuthOptions = newOAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = newPathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
Provider = newDotNetTechyAuthServerProvider()

};

app.UseOAuthBearerTokens(OAuthOptions);
app.UseOAuthAuthorizationServer(OAuthOptions);
app.UseOAuthBearerAuthentication(newOAuthBearerAuthenticationOptions());


HttpConfiguration config = newHttpConfiguration();
WebApiConfig.Register(config);

}

public void Configuration(IAppBuilder app)
{
//app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
ConfigureAuth(app);
GlobalConfiguration.Configure(WebApiConfig.Register);

}


}

}

This is the imprtant line which is loading Owin when application gets intilized.

[assembly: OwinStartup(typeof(DeepCart.Startup))]

Then in

var OAuthOptions = new OAuthAuthorizationServerOptions

{

AllowInsecureHttp = true,

TokenEndpointPath = new PathString("/token"),

AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),

Provider = new DotNetTechyAuthServerProvider()

};


We are providing our earlier created provider: DotNetTechyAuthServerProvider.

Testing the Access Token Generation

Next, we will make a request from the postman where the username and password should be from your database and whatever you have given registration. 

Here is the screenshot of testing the token.

access token.PNG

Integrate This Access Token in Angular 6

This involves multiple steps:

a) Create a service to call the Web API and get the token back.

b) Store the token for the next request to pass into the header

c) Call the ValidateUser method form, and from your login button, click event

d) Create an Auth Guard and override the CanActivate method

Service Method

// This tutorial is by DotNet Techy YouTube Channel

// For more info about channel You can visit this link

//

ValidateUser (user:any)

{

var userData = "username=" + user.UserName + "&password=" + user.Password + "&grant_type=password";

var reqHeader = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded','No-Auth':'True' });

returnthis.httpClient.post(this.apiURL+ '/token',userData,{ headers: reqHeader })
.pipe(
map(res => res),
catchError( this.errorHandler)
);


}

Auth Guard

// This tutorial is by DotNet Techy YouTube Channel

// For more info about channel You can visit this link

// https://www.youtube.com/c/dotnettechy

canActivate(): boolean {

if (!this.auth.isAuthenticated()) {

//this.router.navigate(['login']);

console.log('You are not authrised to view this page')

return false;

}

return true;

}

store token in local storage

storeToken(token: string) {

localStorage.setItem("token", token);

}


Once the login is successful, you should call the storeToken method.

API Web API Web Service authentication AngularJS

Opinions expressed by DZone contributors are their own.

Related

  • ASP.NET Web API: Benefits and Why to Choose It
  • Leveraging Salesforce Using Spring Boot
  • GET, POST, PUT, DELETE: Choosing HTTP Verbs in a Real .NET Core Web API, Not Just by the Textbook
  • Delegated Transport, Forked Authorization: Where Chat and AI-Agent Integrations Actually Break

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook