在 System.Security.Principal命名空間(NameSapce)底下,
有一個 WindowsIdentity 類別,跟「Windows使用者」相關的。
裡面這個範例看得我一頭霧水....不如直接運作一次
直接看結果,還比較清楚。
在 System.Security.Principal命名空間(NameSapce)底下,
有一個 WindowsIdentity 類別,跟「Windows使用者」相關的。
官方文件在此:http://msdn.microsoft.com/zh-tw/library/system.security.principal.windowsidentity.aspx
裡面這個範例看得我一頭霧水。(
這是什麼翻譯啊?快點回火星去吧!地球是很危險~低!)
範例說明:
下列範例顯示 WindowsIdentity 類別中成員的用法。如需顯示如何透過呼叫 Unmanaged Win32 LogonUser 函式取得 Windows 帳戶語彙基元 (Token),然後使用該語彙基元模擬其他使用者的範例,請參閱 WindowsImpersonationContext 類別。
不如直接運作一次 直接看結果,還比較清楚。
下圖是執行結果(看完執行結果,再來對照程式碼。比較容易懂)。
程式是從微軟官方文件那邊來的,小改了幾個字。如下:

Imports System.Security.Principal 002
003
004
Partial Class NTAccount 005
Inherits System.Web.UI.Page 006
007
'=============================================== 008
'== 下列範例顯示 WindowsIdentity 類別中,目前這位成員的用法。== 009
'=============================================== 010
' 011
'==參考網址 http://msdn.microsoft.com/zh-tw/library/system.security.principal.windowsidentity.aspx 012
013
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 014
' Retrieve the [Windows account token] for the current user. 015
Dim logonToken As IntPtr = WindowsIdentity.GetCurrent().Token 016
017
' Constructor implementations. 執行下面四個 Function 018
IntPtrConstructor(logonToken) 019
IntPtrStringConstructor(logonToken) 020
IntPtrStringTypeConstructor(logonToken) 021
IntPrtStringTypeBoolConstructor(logonToken) 022
023
' Property implementations. 024
UseProperties(logonToken) '--UseProperties()是下面的Function 025
026
' Method implementations. 027
GetAnonymousUser() '--GetAnonymousUser()是下面的Function 028
ImpersonateIdentity(logonToken) '--ImpersonateIdentity()是下面的Function 029
030
' Align interface and conclude application. 031
Response.Write("<br><br><hr>程式完成。This sample completed ......successfully<hr>") 032
End Sub 033
034
' Create a WindowsIdentity object for the user represented by the 035
' specified Windows account token. 036
Private Sub IntPtrConstructor(ByVal logonToken As IntPtr) 037
' Construct a WindowsIdentity object using the input account token. 038
'重點!!一個參數 039
Dim windowsIdentity As New WindowsIdentity(logonToken) 040
041
Response.Write("Created a Windows identity object named ( IntPtrConstructor() )-- <font color=red>" + windowsIdentity.Name + "</font>.<br>") 042
End Sub 043
044
' Create a WindowsIdentity object for the user represented by the 045
' [specified account token] and [authentication type]. 046
Private Sub IntPtrStringConstructor(ByVal logonToken As IntPtr) 047
' Construct a WindowsIdentity object using the input account token 048
' and the specified authentication type. 049
Dim authenticationType = "WindowsAuthentication" 050
051
'重點!!兩個參數 052
Dim windowsIdentity As New WindowsIdentity(logonToken, authenticationType) 053
054
Response.Write("Created a Windows identity object named ( IntPtrStringConstructor() )-- <font color=red>" + windowsIdentity.Name + "</font>.<br>") 055
End Sub 056
057
' Create a WindowsIdentity object for the user represented by the 058
' specified account token, authentication type, and Windows account type. 059
Private Sub IntPtrStringTypeConstructor(ByVal logonToken As IntPtr) 060
' Construct a WindowsIdentity object using the input account token, 061
' and the specified authentication type and Windows account type. 062
Dim authenticationType As String = "WindowsAuthentication" 063
Dim guestAccount As WindowsAccountType = WindowsAccountType.Guest 064
065
'重點!!三個參數 066
Dim windowsIdentity As _ 067
New WindowsIdentity(logonToken, authenticationType, guestAccount) 068
069
Response.Write("Created a Windows identity object named ( IntPtrStringTypeConstructor() )--<font color=red>" + windowsIdentity.Name + "</font>.<br>") 070
End Sub 071
072
' Create a WindowsIdentity object for the user represented by the 073
' specified account token, authentication type, Windows account type, 074
' and Boolean authentication flag. 075
Private Sub IntPrtStringTypeBoolConstructor(ByVal logonToken As IntPtr) 076
' Construct a WindowsIdentity object using the input account token, 077
' and the specified authentication type, Windows account type, and 078
' authentication flag. 079
Dim authenticationType As String = "WindowsAuthentication" 080
Dim guestAccount As WindowsAccountType = WindowsAccountType.Guest 081
Dim isAuthenticated As Boolean = True 082
083
'重點!!四個參數 084
Dim windowsIdentity As _ 085
New WindowsIdentity(logonToken, authenticationType, guestAccount, isAuthenticated) 086
087
Response.Write("Created a Windows identity object named ( IntPrtStringTypeBoolConstructor() )--<font color=red>" + windowsIdentity.Name + "</font>.<br>") 088
End Sub 089
090
' Access the properties of a WindowsIdentity object. 091
Private Sub UseProperties(ByVal logonToken As IntPtr) 092
Dim windowsIdentity As New WindowsIdentity(logonToken) '重點!!一個參數 093
Dim propertyDescription As String = "<br>The Windows identity named -- " 094
095
' Retrieve the Windows logon name from the Windows identity object. 096
propertyDescription += "<font color=red>" + windowsIdentity.Name + "</font>" 097
098
'--------------------------------------------------------------(start)-- 099
' Verify that the user account is not considered to be an Anonymous 100
' account by the system. 101
If Not windowsIdentity.IsAnonymous Then 102
propertyDescription += " is not(非) an Anonymous(匿名) account<br>" 103
End If 104
105
' Verify that the user account has been authenticated by Windows. 106
If (windowsIdentity.IsAuthenticated) Then 107
propertyDescription += ", is authenticated(已認證)<br>" 108
End If 109
110
' Verify that the user account is considered to be a System account by 111
' the system. 112
If (windowsIdentity.IsSystem) Then 113
propertyDescription += ", is a System account(系統帳號)<br>" 114
End If 115
116
' Verify that the user account is considered to be a Guest account by 117
' the system. 118
If (windowsIdentity.IsGuest) Then 119
propertyDescription += ", is a Guest account(Guest客人帳戶)<br>" 120
End If 121
'--------------------------------------------------------------(end)-- 122
123
Dim authenticationType As String = windowsIdentity.AuthenticationType 124
125
' Append the authenication type to the output message. 126
If (Not authenticationType Is Nothing) Then 127
propertyDescription += (" and uses <font color=red>" + authenticationType + "</font> authentication type.<br>") 128
End If 129
130
Response.Write(propertyDescription) 131
132
' Display the SID for the owner. 133
Response.Write("<hr>The SID for the owner is : ") 134
Dim si As SecurityIdentifier = windowsIdentity.Owner 135
Response.Write("<font color=red>" + si.ToString() + "</font><br>") 136
137
'--------------------------------------------------------------(start) 138
' Display the SIDs for the groups the current user belongs to. 139
Response.Write("<hr>Display the SIDs for the groups the current user belongs to. 目前這名使用者隸屬於哪些群組?<br>") 140
141
Dim irc As IdentityReferenceCollection = windowsIdentity.Groups 142
Dim ir As IdentityReference 143
144
For Each ir In irc 145
Response.Write("<font color=green>" + ir.Value + "</font><br>") 146
Next 147
'--------------------------------------------------------------(end) 148
149
Dim token As TokenImpersonationLevel = windowsIdentity.ImpersonationLevel 150
Response.Write("<br>The impersonation(模擬) level for the current user is : <font color=red>" + token.ToString() + "</font><br>") 151
End Sub 152
153
154
155
'----------------------------------------------------------------------------------------------------------------------------- 156
157
' Get the WindowsIdentity object for an Anonymous user. 158
Private Sub GetAnonymousUser() 159
' Retrieve a WindowsIdentity object that represents an anonymous 160
' Windows user. 161
Dim windowsIdentity As WindowsIdentity = windowsIdentity.GetAnonymous() 162
End Sub 163
164
165
' Impersonate a Windows identity. 166
Private Sub ImpersonateIdentity(ByVal logonToken As IntPtr) 167
' Retrieve the Windows identity using the specified token. 168
Dim windowsIdentity As New WindowsIdentity(logonToken) 169
170
' Create a WindowsImpersonationContext object by impersonating the Windows identity. 171
Dim impersonationContext As WindowsImpersonationContext = windowsIdentity.Impersonate() 172
173
Response.Write("Name of the identity after impersonation(模擬): <font color=red>" + windowsIdentity.GetCurrent().Name + "</font>.<br>") 174
175
' Stop impersonating the user. 176
impersonationContext.Undo() 177
' Check the identity. 178
Response.Write("Name of the identity after performing an <b>Undo</b> on the impersonation(模擬): <font color=red>" + windowsIdentity.GetCurrent().Name + "</font>.") 179
End Sub 180
181
End Class
認證型態,在單機裡面,會是NTLM。(如上圖,我的電腦是Windows Vista)
如果你的電腦有加入AD網域,則會是「Kerberos」認證型態。
又臭又長.......的一段程式..... Orz
Oh! My God!
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。


Imports
Private