Auf Englisch lesen

Freigeben über


SiteIdentityPermission-Klasse

Definiert die Identitätsberechtigung für die Website, aus der der Code stammt. Diese Klasse kann nicht vererbt werden.

Namespace: System.Security.Permissions
Assembly: mscorlib (in mscorlib.dll)

Syntax

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public sealed class SiteIdentityPermission : CodeAccessPermission

Hinweise

Durch die Verwendung dieser Klasse kann sichergestellt werden, dass der Aufruf von einer bestimmten Website aus erfolgte. Die Site-Identität wird nur bei Code von URLs mit den Protokollen HTTP, HTTPS und FTP definiert. Eine Site ist die Zeichenfolge zwischen dem "//", das nach dem Protokoll eines URL steht, und dem folgenden "/" (sofern vorhanden), z. B. www.fourthcoffee.com im URL https://www.fourthcoffee.com/process/grind.htm. Anschlussnummern werden hierdurch ausgeschlossen. Wenn ein URL https://www.fourthcoffee.com:8000/ lautet, ist die entsprechende Site www.fourthcoffee.com, nicht www.fourthcoffee.com:8000.

Die Site kann mit dem genauen Namen oder mithilfe eines vorangestellten Platzhalters ("*") vor dem Trennpunkt angegeben werden. Die Zeichenfolge für den Sitenamen *.fourthcoffee.com stimmt sowohl mit fourthcoffee.com als auch mit www.fourthcoffee.com überein. Ohne Platzhalterzeichen muss der angegebene Sitename genau dem tatsächlichen Namen entsprechen. Die Zeichenfolge * für den Sitenamen entspricht allen Sites, nicht jedoch Code ohne Sitebeweis.

Warnung

Die SiteIdentityPermission-Klasse gewährt die Berechtigung für alle Pfade zur Site, einschließlich URL und IP-Adresse. Um für den Zugriff auf eine Site auf Deny festzulegen, müssen Sie die Deny-Methode für alle möglichen Pfade der Site festlegen. Wenn z. B. www.fourthcoffee.com die IP-Adresse 192.168.238.241 hat und Sie den Zugriff auf www.fourthcoffee.com mit Deny verweigern möchten, müssen Sie die Deny-Methode sowohl für www.fourthcoffee.com als auch für 192.168.238.241 und alle anderen Pfade festlegen, über die auf die Site zugegriffen werden kann. Ein einfacheres Verfahren für den Umgang mit mehreren Pfaden besteht in der Kombination aus PermitOnly-Methode und Deny-Methode. Weitere Informationen über dieses Thema und die Verwendung der PermitOnly-Methode mit der Deny-Methode finden Sie unter Canonicalization Problems Using Deny im Thema Verwenden der Deny-Methode.

Hinweis

In .NET Framework, Versionen 1.0 und 1.1, können Identitätsberechtigungen nicht den Berechtigungszustandswert Unrestricted haben. In .NET Framework, Version 2.0, können Identitätsberechtigungen jeden Berechtigungszustandswert haben. Das heißt, dass Identitätsberechtigungen in Version 2.0 über das gleiche Verhalten verfügen wie Berechtigungen, die die IUnrestrictedPermission-Schnittstelle implementieren. Informationen über die Ausführung von Version 2.0-Anwendungen mit der Version 1.1-Zertifizierungsstellenrichtlinie finden Sie unter <legacyV1CASPolicy>-Element.

Beispiel

using System;
using System.Security;
using System.Security.Permissions;

[assembly: CLSCompliant(true)]

public class SiteIdentityPermissionDemo
{
    // IsSubsetOf determines whether the current permission is a subset of the specified permission.
    private bool IsSubsetOfDemo()
    {
        bool returnCodeCode = true;

        String site1, site2;
        SiteIdentityPermission siteIdPerm1, siteIdPerm2;

        SiteGenerator siteGen1 = new SiteGenerator();
        SiteGenerator siteGen2 = new SiteGenerator();

        siteGen1.ResetIndex();
        while (siteGen1.CreateSite(out site1))
        {
            siteIdPerm1 = siteGen1.CreatePerm(site1);
            if (siteIdPerm1 == null ) continue;
            siteGen2.ResetIndex();
            Console.WriteLine("**************************************************************************");
            while (siteGen2.CreateSite(out site2))
            {
                try
                {
                    siteIdPerm2 = siteGen2.CreatePerm(site2);
                    if (siteIdPerm2 == null ) continue;

                    if (siteIdPerm1.IsSubsetOf(siteIdPerm2))
                    {
                        Console.WriteLine(site1 + " is a subset of " + site2);
                    }
                    else
                    {
                        Console.WriteLine(site1 + " is not a subset of " + site2);

                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("An exception was thrown : " + e);
                    return false;
                }

            }
        }
        return returnCodeCode;

    }
    // Union creates a new permission that is the union of the current permission
    // and the specified permission.
    private bool UnionDemo()
    {
        bool returnCodeCode = true;
        String site1, site2;
        SiteIdentityPermission siteIdPerm1, siteIdPerm2, p3;

        SiteGenerator siteGen1 = new SiteGenerator();
        SiteGenerator siteGen2 = new SiteGenerator();

        siteGen1.ResetIndex();
        while (siteGen1.CreateSite(out site1))
        {
            siteIdPerm1 = siteGen1.CreatePerm(site1);
            if (siteIdPerm1 == null ) continue;
            siteGen2.ResetIndex();
            Console.WriteLine("**************************************************************************");
            while (siteGen2.CreateSite(out site2))
            {
                siteIdPerm2 = siteGen2.CreatePerm(site2);
                if (siteIdPerm2 == null ) continue;
                String firstSite = site1 == null ? "null" : site1;
                String secondSite = site2 == null ? "null" : site2;
                try
                {
                    p3 = (SiteIdentityPermission)siteIdPerm1.Union(siteIdPerm2);
                    String thirdSite = p3.Site == null ? "null" : p3.Site;

                    if (p3 != null)
                    {
                        Console.WriteLine("The union of " + firstSite + " and \n\t" + secondSite + " = \n\t"
                            + thirdSite + "\n");

                    }
                    else
                    {
                        Console.WriteLine("The union of " + firstSite + " and \n\t" + secondSite + " = null.\n");
                    }
                }
                catch (Exception e)
                {
                    // Expected exception.
                    Console.WriteLine(e.Message + "\n\t" + firstSite + " and " + secondSite + "\n");
                }
            }
        }
        return returnCodeCode;

    }
    // Intersect creates and returns a new permission that is the intersection of the
    // current permission and the permission specified.
    private bool IntersectDemo()
    {

        bool returnCodeCode = true;

        String site1, site2;
        SiteIdentityPermission siteIdPerm1, siteIdPerm2, p3;

        SiteGenerator siteGen1 = new SiteGenerator();
        SiteGenerator siteGen2 = new SiteGenerator();

        siteGen1.ResetIndex();
        while (siteGen1.CreateSite(out site1))
        {
            siteIdPerm1 = siteGen1.CreatePerm(site1);
            if (siteIdPerm1 == null ) continue;
            siteGen2.ResetIndex();
            Console.WriteLine("**************************************************************************");
            while (siteGen2.CreateSite(out site2))
            {
                siteIdPerm2 = siteGen2.CreatePerm(site2);
                if (siteIdPerm2 == null ) continue;
                String firstSite = site1 == null ? "null" : site1;
                String secondSite = site2 == null ? "null" : site2;
                try
                {
                    p3 = (SiteIdentityPermission)siteIdPerm1.Intersect(siteIdPerm2);
                    String thirdSite = p3.Site == null ? "null" : p3.Site;

                    if (p3 != null)
                    {
                        Console.WriteLine("The intersection of " + firstSite + " and \n\t" + secondSite + " = " + thirdSite + "\n");

                    }
                    else
                    {
                        Console.WriteLine("The intersection of " + firstSite + " and \n\t" + secondSite + " = null.\n");
                    }
                }
                catch
                {
                    Console.WriteLine("The intersection of " + firstSite + " and \n\t" + secondSite + " = null.\n");

                }


            }
        }


        return returnCodeCode;

    }
    //Copy creates and returns an identical copy of the current permission.
    private bool CopyDemo()
    {

        bool returnCodeCode = true;

        String site1;
        SiteIdentityPermission siteIdPerm1, siteIdPerm2;
        SiteGenerator siteGen1 = new SiteGenerator();
        SiteGenerator siteGen2 = new SiteGenerator();

        siteGen1.ResetIndex();
        while (siteGen1.CreateSite(out site1))
        {
            siteIdPerm1 = siteGen1.CreatePerm(site1);
            if (siteIdPerm1 == null ) continue;
            siteGen2.ResetIndex();
            Console.WriteLine("**************************************************************************");
            try
            {
                siteIdPerm2 = (SiteIdentityPermission)siteIdPerm1.Copy();
                if (siteIdPerm2 != null)
                {
                    Console.WriteLine("The copy of " + siteIdPerm2.ToString() + " succeeded.\n");
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("The copy failed : " + siteIdPerm1.ToString() + e);
                continue;
            }
        }
        return returnCodeCode;

    }
    // ToXml creates an XML encoding of the permission and its current state; FromXml reconstructs a
    // permission with the specified state from the XML encoding.
    private bool ToFromXmlDemo()
    {

        bool returnCodeCode = true;

        String site1;
        SiteIdentityPermission siteIdPerm1, siteIdPerm2;
        SiteGenerator siteGen1 = new SiteGenerator();
        SiteGenerator siteGen2 = new SiteGenerator();

        siteGen1.ResetIndex();
        while (siteGen1.CreateSite(out site1))
        {
            siteIdPerm1 = siteGen1.CreatePerm(site1);
            if (siteIdPerm1 == null ) continue;
            siteGen2.ResetIndex();
            Console.WriteLine("**************************************************************************");
            try
            {
                siteIdPerm2 = new SiteIdentityPermission(PermissionState.None);
                siteIdPerm2.FromXml(siteIdPerm1.ToXml());
                bool result = siteIdPerm2.Equals(siteIdPerm1);
                if (siteIdPerm2.IsSubsetOf(siteIdPerm1) && siteIdPerm1.IsSubsetOf(siteIdPerm2))
                {
                    Console.WriteLine("Result of ToFromXml = " + siteIdPerm2.ToString());
                }
                else
                {
                    Console.WriteLine(siteIdPerm2.ToString());
                    Console.WriteLine(siteIdPerm1.ToString());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("ToFromXml failed. " + e);
                continue;
            }

        }


        return returnCodeCode;

    }
    // Invoke all demos.
    public bool RunDemo()
    {

        bool returnCode = true;
        bool tempReturnCode;
        // Call the IsSubsetOf demo.
        if (tempReturnCode = IsSubsetOfDemo()) Console.Out.WriteLine("The IsSubsetOf demo completed successfully.");
        else
            Console.Out.WriteLine("subsetDemo failed.");
        returnCode = tempReturnCode && returnCode;

        // Call the Union demo.
        if (tempReturnCode = UnionDemo()) Console.Out.WriteLine("The Union demo completed successfully.");
        else
            Console.Out.WriteLine("UnionDemo failed.");
        returnCode = tempReturnCode && returnCode;

        // Call the Intersect demo.
        if (tempReturnCode = IntersectDemo()) Console.Out.WriteLine("The Intersect demo completed successfully.");
        else
            Console.Out.WriteLine("IntersectDemo failed.");
        returnCode = tempReturnCode && returnCode;


        // Call the Copy demo.
        if (tempReturnCode = CopyDemo()) Console.Out.WriteLine("The Copy demo completed successfully.");
        else
            Console.Out.WriteLine("CopyDemo failed.");
        returnCode = tempReturnCode && returnCode;

        // Call the ToFromXML demo.
        if (tempReturnCode = ToFromXmlDemo()) Console.Out.WriteLine("The ToFromXML demo completed successfully.");
        else
            Console.Out.WriteLine("ToFromXmlDemo failed.");
        returnCode = tempReturnCode && returnCode;

        return (returnCode);

    }
    // Test harness.
    public static void Main(String[] args)
    {
        try
        {
            SiteIdentityPermissionDemo testcase = new SiteIdentityPermissionDemo();
            bool returnCode = testcase.RunDemo();
            if (returnCode)
            {
                Console.Out.WriteLine("The SiteIdentityPermission demo completed successfully.");
                Console.Out.WriteLine("Press the Enter key to exit.");
                string consoleInput = Console.ReadLine();
                System.Environment.ExitCode = 100;
            }
            else
            {
                Console.Out.WriteLine("The SiteIdentityPermission demo failed.");
                Console.Out.WriteLine("Press the Enter key to exit.");
                string consoleInput = Console.ReadLine();
                System.Environment.ExitCode = 101;
            }
        }
        catch (Exception e)
        {
            Console.Out.WriteLine("The SiteIdentityPermission demo failed.");
            Console.WriteLine(e.ToString());
            Console.Out.WriteLine("Press the Enter key to exit.");
            string consoleInput = Console.ReadLine();
            System.Environment.ExitCode = 101;
        }
    }
}


// This class generates SiteIdentityPermission objects.

internal class SiteGenerator
{

    private string[] siteArray =
        // Replace this array with Web sites of your own choosing.
{
    "www.fourthcoffee.com",
    "www.tailspintoys.com",
    "*.fourthcoffee.com",
    "*.com",
    ""};

    private int siteIndex = 0;

    public SiteGenerator()
    {
        ResetIndex();
    }

    public void ResetIndex()
    {

        siteIndex = 0;

    }
    
    // CreateSite creates a SiteIdentityPermission.
    public bool CreateSite(out string site)
    {
        if (siteIndex >= siteArray.Length)
        {

            site = "null";
            return false;

        }

        site = siteArray[siteIndex++];
        return true;

        
    }
   
    public SiteIdentityPermission CreatePerm(string site)
    {
        SiteIdentityPermission sitePerm;
        try
        {
            string newSite = site;
            sitePerm = new SiteIdentityPermission(newSite);
            return sitePerm;
        }
        catch (ArgumentException e)
        {
            Console.WriteLine("An ArgumentException was thrown: " + e.Message);
            if (site != null && site != "")
            {
                Console.WriteLine(site + " is an invalid site.");
            }
            else if (site == "")
            {
                Console.WriteLine("An empty string signifies an invalid site.");
                site = "an empty string";
            }
            return null;
        }
    }
} // End of SiteGenerator.

Vererbungshierarchie

System.Object
   System.Security.CodeAccessPermission
    System.Security.Permissions.SiteIdentityPermission

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

SiteIdentityPermission-Member
System.Security.Permissions-Namespace
SiteIdentityPermissionAttribute
Site
SiteMembershipCondition

Weitere Ressourcen

Sicherheitsberechtigungen
Anfordern von Berechtigungen