OWIN OAUTH 2 Bearer Token

Aug 6, 2014 9:00:00 AM / by daniel.comas

 

Como comentamos en el anterior post en el que explicamos la nueva forma de validación por cookies, mencionábamos sobre la posibilidad de tener varios tipos de validación, pero dentro de nuestro código unificado por el mismo objeto Identity User.

 

Vamos a ver como podríamos añadirle Oauth2 a nuestro proyecto.

 

Modo OAUTH2 Servidor y Cliente:

 

Imports Microsoft.AspNet.Identity
Imports Microsoft.Owin
Imports Microsoft.Owin.Security.Cookies
Imports Owin
Imports Microsoft.Owin.Security.OAuth

<Assembly: OwinStartup(GetType(WebFormsIdentity.Startup))>

Namespace WebFormsIdentity
Public Class Startup
Public Sub Configuration(app As IAppBuilder)
' Activamos el módulo de OWIN para utilizar cookies (anterior post)
app.UseCookieAuthentication(New CookieAuthenticationOptions() With { _
.AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, _
.LoginPath = New PathString("/Login.aspx"), _
.ExpireTimeSpan = System.TimeSpan.FromMinutes(60)
})

ConfigureOAuth(app)

' Activamos CORS para consultas ajax des de WEB
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
End Sub
Public Sub ConfigureOAuth(app As IAppBuilder)

Dim OAuthServerOptions As New OAuthAuthorizationServerOptions() With { _
.AllowInsecureHttp = True, _
.TokenEndpointPath = New PathString("/token"), _
.AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), _
.Provider = New SimpleAuthorizationServerProvider() _
}

' Activamos OAUTH2 Servidor
app.UseOAuthAuthorizationServer(OAuthServerOptions)

' Activamos OAUTH2 Cliente.
app.UseOAuthBearerAuthentication(New OAuthBearerAuthenticationOptions())

End Sub
End Class
End Namespace

 

En el evento GrantResourceOwnerCredentials de la clase SimpleAuthorizationServerProvider entrará cuando hagamos una petición /token

 

Imports Microsoft.VisualBasic
Imports Microsoft.Owin.Security.OAuth
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System.Threading.Tasks
Imports System.Security.Claims
Imports Microsoft.AspNet.Identity
Imports Microsoft.Owin.Security

Public Class SimpleAuthorizationServerProvider
Inherits OAuthAuthorizationServerProvider

Public Overrides Async Function ValidateClientAuthentication(context As Microsoft.Owin.Security.OAuth.OAuthValidateClientAuthenticationContext) As Task
context.Validated()
End Function

Public Overrides Async Function GrantResourceOwnerCredentials(context As OAuthGrantResourceOwnerCredentialsContext) As Task

context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", New String() {"*"})

Dim user As ApplicationUser

Using _repo As New UserManager()

user = Await _repo.FindAsync(context.UserName, context.Password)

If user Is Nothing Then
context.SetError("invalid_grant", "The user name or password is incorrect.")
Return
Else
Dim identity = _repo.CreateIdentity(user, DefaultAuthenticationTypes.ExternalBearer)

context.Validated(identity)
End If
End Using
End Function
End Class

 

 

 

Modo OAUTH2 solo cliente (SSO):

 

Pensemos que tenemos otro proyecto el que cuál hace la validación por token, y en este solo queremos utilizar ese token.


Imports Microsoft.AspNet.Identity
Imports Microsoft.Owin
Imports Microsoft.Owin.Security.Cookies
Imports Owin
Imports Microsoft.Owin.Security.OAuth

<Assembly: OwinStartup(GetType(WebFormsIdentity.Startup))>

Namespace WebFormsIdentity
Public Class Startup
Public Sub Configuration(app As IAppBuilder)
' Activamos el módulo de OWIN para utilizar cookies (anterior post)
app.UseCookieAuthentication(New CookieAuthenticationOptions() With { _
.AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, _
.LoginPath = New PathString("/Login.aspx"), _
.ExpireTimeSpan = System.TimeSpan.FromMinutes(60)
})

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie)

' Activamos OAUTH2 Cliente.
app.UseOAuthBearerAuthentication(New OAuthBearerAuthenticationOptions())

' Activamos CORS para consultas ajax des de WEB
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
End Sub
End Class
End Namespace

 

Topics: ASP, Autenticacion, Bearer Token, Identity, .NET, Oauth, OWIN, Programación

daniel.comas

Written by daniel.comas

Lists by Topic

see all
Servicios gestionados

Categorías

Ver todas