xavehoo
/
XAF_how-to-use-google-facebook-and-microsoft-accounts-in-aspnet-xaf-applications-oauth2-demo-t535280
Public
forked from DevExpress-Examples/xaf-web-forms-use-oauth2-authentication-providers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
OAuthProvider.vb
70 lines (67 loc) · 2.67 KB
/
OAuthProvider.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Imports Microsoft.VisualBasic
Imports AuthenticationOwin.Module
Imports AuthenticationOwin.Module.BusinessObjects
Imports AuthenticationOwin.Module.Web.Security
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.ExpressApp.Security
Imports DevExpress.ExpressApp.Utils
Imports DevExpress.ExpressApp.Web
Imports Microsoft.Owin.Security
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Security.Claims
Imports System.Threading.Tasks
Imports System.Web
Namespace AuthenticationOwin.Web.Security
Public Class OAuthProvider
Implements IAuthenticationProvider
Private ReadOnly userType As Type
Private ReadOnly security As SecurityStrategyComplex
Private privateCreateUserAutomatically As Boolean
Public Property CreateUserAutomatically() As Boolean
Get
Return privateCreateUserAutomatically
End Get
Set(ByVal value As Boolean)
privateCreateUserAutomatically = value
End Set
End Property
Public Sub New(ByVal userType As Type, ByVal security As SecurityStrategyComplex)
Guard.ArgumentNotNull(userType, "userType")
Me.userType = userType
Me.security = security
End Sub
Public Function Authenticate(ByVal objectSpace As IObjectSpace) As Object Implements IAuthenticationProvider.Authenticate
Dim user As IAuthenticationOAuthUser = Nothing
Dim authenticateResult As AuthenticateResult = Authenticate().Result
If authenticateResult IsNot Nothing Then
Dim emailClaim As Claim = authenticateResult.Identity.FindFirst(ClaimTypes.Email)
If emailClaim IsNot Nothing Then
user = CType(objectSpace.FindObject(userType, CriteriaOperator.Parse("OAuthAuthenticationEmails[Email = ?]", emailClaim.Value)), IAuthenticationOAuthUser)
If user Is Nothing AndAlso CreateUserAutomatically Then
user = CType(objectSpace.CreateObject(userType), IAuthenticationOAuthUser)
user.UserName = emailClaim.Value
Dim email As EmailEntity = objectSpace.CreateObject(Of EmailEntity)()
email.Email = emailClaim.Value
user.OAuthAuthenticationEmails.Add(email)
CType(security, CustomSecurityStrategyComplex).InitializeNewUser(objectSpace, user)
objectSpace.CommitChanges()
End If
End If
Else
WebApplication.Redirect(WebApplication.LogonPage)
End If
If user Is Nothing Then
Throw New Exception("Login failed")
End If
Return user
End Function
Public Sub Setup(ParamArray ByVal args() As Object) Implements IAuthenticationProvider.Setup
End Sub
Private async Function Authenticate() As Task(Of AuthenticateResult)
Return await HttpContext.Current.GetOwinContext().Authentication.AuthenticateAsync("External")
End Function
End Class
End Namespace