-1

asp.netで作成されたWebサイトにログインするためにActiveDirectoryを使用する必要があるプロジェクトがあります。このチュートリアルに従います。

ASP.NETからのActiveDirectory認証

ユーザーのグループを取得したいので、default.aspx.vbページで次のコードを試しましたが、機能しません。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("Hello, " + Server.HtmlEncode(User.Identity.Name))

    Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)

    If id IsNot Nothing Then

        Dim ticket As FormsAuthenticationTicket = id.Ticket
        Response.Write("<p/>TicketName: " + ticket.Name)
        Response.Write("<br/>Cookie Path: " + ticket.CookiePath)
        Response.Write("<br/>Ticket Expiration: " + ticket.Expiration.ToString())
        Response.Write("<br/>Expired: " + ticket.Expired.ToString())
        Response.Write("<br/>Persistent: " + ticket.IsPersistent.ToString())
        Response.Write("<br/>IssueDate: " + ticket.IssueDate.ToString())
        Response.Write("<br/>UserData: " + ticket.UserData)
        Response.Write("<br/>Version: " + ticket.Version.ToString())
    End If
End Sub
4

2 に答える 2

2

私はより良い解決策を見つけました、私がインターネットで見つけるどんな答えよりも簡単です。

まず、ユーザーがActiveDirectoryのグループに属しているかどうかを検証するクラスを作成します。

Imports System.Security.Principal   

Public Class AutorizationFun
    Dim access As Boolean = False
    Dim id As WindowsIdentity = WindowsIdentity.GetCurrent()
    Public User As WindowsPrincipal = New WindowsPrincipal(id)

リージョン「グループ検証」

'Belongs to sample group
Private Function inSampleGroup() As Boolean
    Return User.IsInRole("bth0\GG BTUC-SAMPLEGROUP")
End Function
Private Function inSampleGroup2() As Boolean
    Return User.IsInRole("bth0\GG BTUC-SAMPLEGROUP2")
End Function

終了リージョン

Public Function ProgramsAccsess(ByVal vPage As String) As Boolean
    access = False

    Select Case vPage
        Case "~/Sample.aspx"
            If inSampleGroup() Then
                access = True
            End If
        '---------------------------------------------------------------------
    End Select
    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    'access = True
    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    Return access
End Function   

End Class

次に、すべてのページの背後にあるコードで関数を作成する必要があります。

'create var
    Dim ValidateUser As New AutorizationFun

    Protected Sub VerifyAccessPage()
        If ValidateUser.ProgramsAccsess(Request.AppRelativeCurrentExecutionFilePath) = False Then
            Response.Redirect("~/DeniedAccess.aspx")
        End If
    End Sub

そして、Page_loadイベントで関数を使用する必要があることを終了するには、次のようにします。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'check whether page is postback or not            
        If Not Page.IsPostBack Then
            VerifyAccessPage()
        End If
    End Sub
于 2012-11-22T21:30:22.110 に答える
0

サーバーがWindowsドメインにある場合は、Active Directoryに接続する必要があります。したがって、Windows認証を使用して、既にADクレデンシャルでログインしている必要があります(ユーザーは以前にドメインにいる必要があるため、またはブラウザーによってADクレデンシャルの入力を求められます)。 )。

ユーザーグループを取得するには、DirectorySearcherクラスを使用できます。

于 2012-11-16T19:25:57.787 に答える