Bir ASP.NET Web Pages (Razor) sitesine güvenlik ve üyelik eklemeAdding Security and Membership to an ASP.NET Web Pages (Razor) Site

Tom FitzMacken tarafındanby Tom FitzMacken

Bu makalede, bazı sayfalardan yalnızca oturum açan kişiler için kullanılabilir olması için bir ASP.NET Web sayfaları (Razor) Web sitesinin nasıl güvenliğini sağlayabileceğiniz açıklanmaktadır.This article explains how to secure an ASP.NET Web Pages (Razor) website so that some of the pages are available only to people who log in. (Ayrıca, herkesin erişebileceği sayfalar oluşturmayı da göreceksiniz.)(You'll also see how to create pages that anyone can access.)

Şunları öğreneceksiniz:What you'll learn:

  • Bazı sayfalarda yalnızca üyelere erişimi sınırlayabilmeniz için kayıt sayfası ve oturum açma sayfası olan bir Web sitesi oluşturma.How to create a website that has a registration page and a login page so that for some pages you can limit access to only members.
  • Ortak ve yalnızca üye sayfalar oluşturma.How to create public and member-only pages.
  • Sitenizde farklı güvenlik izinleri olan gruplar olan roller ve bir role Kullanıcı atama.How to define roles, which are groups that have different security permissions on your site, and how to assign users to a role.
  • Otomatik programların (botların) üye hesapları oluşturmasını engellemek için CAPTCHA kullanma.How to use CAPTCHA to prevent automated programs (bots) from creating member accounts.

Makalesinde sunulan ASP.NET özellikleri şunlardır:These are the ASP.NET features introduced in the article:

  • WebMatrix Başlatıcı site şablonu.The WebMatrix Starter Site template.
  • WebSecurity Yardımcısı ve Roles sınıfı.The WebSecurity helper and Roles class.
  • ReCaptcha Yardımcısı.The ReCaptcha helper.

Öğreticide kullanılan yazılım sürümleriSoftware versions used in the tutorial

  • ASP.NET Web sayfaları (Razor) 2ASP.NET Web Pages (Razor) 2
  • WebMatrix 3WebMatrix 3
  • ASP.NET Web yardımcıları kitaplığıASP.NET Web Helpers Library

Web sitenizi, kullanıcıların oturum — açabilmeleri için ayarlayabilirsiniz, böylece site üyeliğidestekler.You can set up your website so that users can log into it — that is, so that the site supports membership. Bu pek çok nedenden dolayı yararlı olabilir.This can be useful for many reasons. Örneğin, sitenizde yalnızca üyeler için kullanılabilir olan sayfalar bulunabilir.For example, your site might have pages that should be available only to members. Bazı durumlarda, size geri bildirim göndermek veya bir yorum bırakmak için kullanıcıların oturum açmasını isteyebilirsiniz.In some cases, you might require users to log in in order to send you feedback or leave a comment.

Web siteniz üyeliği desteklese de, kullanıcıların sitedeki bazı sayfaları kullanmadan önce oturum açması gerekmez.Even if your website supports membership, users aren't necessarily required to log in before they use some of the pages on the site. Oturum açmamış kullanıcılar Anonim Kullanıcıolarak bilinir.Users who aren't logged in are known as anonymous users.

Bir Kullanıcı Web sitenize kaydedebilir ve sonra sitede oturum açabilir.A user can register on your website and can then log in to the site. Web sitesi, kullanıcıların iddia ettikleri kim olduğunu onaylamak için bir Kullanıcı adı (e-posta adresi) ve parola gerektirir.The website requires a user name (an email address) and a password to confirm that users are who they claim to be. Bu işlem, oturum açma ve kullanıcının kimliğini onaylama kimlik doğrulamasıolarak bilinir.This process of logging in and confirming a user's identity is known as authentication.

Güvenlik ve üyeliği farklı yollarla ayarlayabilirsiniz:You can set up security and membership in different ways:

  • WebMatrix kullanıyorsanız, Başlatıcı site şablonunu temel alan yeni bir site oluşturmak daha kolay bir yoldur.If you're using WebMatrix, an easy way is to create as new site based on the Starter Site template. Bu şablon, güvenlik ve üyelik için zaten yapılandırılmış ve zaten bir kayıt sayfası, oturum açma sayfası ve benzeri.This template is already configured for security and membership and already has a registration page, a login page, and so on.

    Şablon tarafından oluşturulan sitede, kullanıcıların Facebook, Google veya Twitter gibi bir dış siteyi kullanarak oturum açmasına izin vermek için bir seçenek de vardır.The site created by the template also has an option to let users log in using an external site like Facebook, Google, or Twitter.

  • Mevcut bir siteye güvenlik eklemek istiyorsanız veya Başlatıcı site şablonunu kullanmak istemiyorsanız, kendi kayıt sayfanızı, oturum açma sayfanızı ve benzerlerini oluşturabilirsiniz.If you want to add security to an existing site, or if you don't want to use the Starter Site template, you can create your own registration page, login page, and so on.

Bu makalede, Başlatıcı site şablonunu kullanarak güvenlik ekleme — ilk seçeneğe odaklanılır.This article focuses on the first option — how to add security by using the Starter Site template. Ayrıca, kendi güvenlerinizi uygulama hakkında bazı temel bilgiler sağlar ve bunun nasıl yapılacağı hakkında daha fazla bilgi için bağlantılar sağlar.It also provides some basic information about how to implement your own security and then provides links to more information about how to do that. Ayrıca, ayrı bir makalede daha ayrıntılı olarak açıklanan dış oturum açma işlemlerinin nasıl etkinleştirileceği hakkında bilgiler de vardır.There is also information about how to enable external logins, which is described in more detail in a separate article.

Başlatıcı site şablonunu kullanarak Web sitesi güvenliği oluşturmaCreating Website Security Using the Starter Site Template

WebMatrix 'te, aşağıdakileri içeren bir Web sitesi oluşturmak için Başlangıç site şablonunu kullanabilirsiniz:In WebMatrix, you can use the Starter Site template to create a website that contains the following:

  • Üyelerinize yönelik kullanıcı adlarını ve parolaları depolamak için kullanılan bir veritabanı.A database that's used to store user names and passwords for your members.
  • Anonim (yeni) Kullanıcıların kaydedebileceği bir kayıt sayfası.A registration page where anonymous (new) users can register.
  • Oturum açma ve oturum kapatma sayfası.A login and logout page.
  • Parola kurtarma ve sıfırlama sayfası.A password recovery and reset page.

Aşağıdaki yordamda sitesini oluşturma ve yapılandırma açıklanmaktadır.The following procedure describes how to create the site and configure it.

  1. WebMatrix 'i başlatın ve hızlı başlangıç sayfasında şablondan site' yi seçin.Start WebMatrix and in the Quick Start page, select Site From Template.

  2. Başlatıcı site şablonunu seçin ve ardından Tamam' a tıklayın.Select the Starter Site template and then click OK. WebMatrix yeni bir site oluşturur.WebMatrix creates a new site.

  3. Sol bölmede dosyalar çalışma alanı Seçici ' ye tıklayın.In the left pane, click the Files workspace selector.

  4. Web sitenizin kök klasöründe, genel ayarları içermesi için kullanılan özel bir dosya olan _AppStart. cshtml dosyasını açın.In the root folder of your website, open the _AppStart.cshtml file, which is a special file that's used to contain global settings. // karakterleri kullanılarak açıklama eklenen bazı deyimleri içerir:It contains some statements that are commented out using the // characters:

    //WebMail.SmtpServer = "mailserver.example.com";
    //WebMail.EnableSsl = true;
    //WebMail.UserName = "username@example.com";
    //WebMail.Password = "your-password";
    //WebMail.From = "your-name-here@example.com";
    

    Bu deyimler, e-posta göndermek için kullanılabilen WebMail yardımcısını yapılandırır.These statements configure the WebMail helper, which can be used to send email. Üyelik sistemi, kullanıcılar kaydolduklarında veya parolalarını değiştirmek istediklerinde onay iletileri göndermek üzere e-posta kullanabilir.The membership system can use email to send confirmation messages when users register or when they want to change their passwords. (Örneğin, kullanıcılar kaydolduktan sonra kayıt işlemini bitirebilmek için tıklabilecekleri bir bağlantı içeren bir e-posta alırlar.)(For example, after users register, they get an email that includes a link that they can click in order to finish the registration process.)

    E-posta gönderme, bir ASP.NET Web sayfaları sitesine e-posta eklemebölümünde açıklandığı gıbı bir SMTP sunucusuna erişim gerektirir.Sending email requires access to an SMTP server, as described in Adding Email to an ASP.NET Web Pages Site. E-posta ayarlarını, e-posta gönderebilen her sayfaya tekrar tekrar kodlamamaları için bu Merkezi _AppStart. cshtml dosyasında depolayacaksınız.You'll store the email settings in this central _AppStart.cshtml file so that you don't have to code them repeatedly into each page that can send email. (Bir kayıt veritabanını ayarlamak için SMTP ayarlarını yapılandırmanız gerekmez; kullanıcıları e-posta diğer adından doğrulamak ve kullanıcıların unutulan bir parolayı sıfırlamasını sağlamak istiyorsanız SMTP ayarları gerekir.)(You don't need to configure SMTP settings to set up a registration database; you only need SMTP settings if you want to validate users from their email alias and let users reset a forgotten password.)

  5. Her birinin önüne // kaldırarak deyimlerin açıklamasını kaldırın.Uncomment the statements by removing // from in front of each one.

    E-posta onayını ayarlamak istemiyorsanız, bu adımı ve sonraki adımı atlayabilirsiniz.If you do not want to set up email confirmation, you can skip this step and the next step. SMTP değerleri ayarlanmamışsa, yeni hesap onay e-postası olmadan hemen kullanılabilir.If the SMTP values are not set, the new account is immediately available without a confirmation email.

  6. Koddaki aşağıdaki e-postayla ilgili ayarları değiştirin:Modify the following email-related settings in the code:

    • WebMail.SmtpServer, erişiminiz olan SMTP sunucusunun adına ayarlayın.Set WebMail.SmtpServer to the name of the SMTP server that you have access to.

    • WebMail.EnableSsl trueolarak ayarlı bırakın.Leave WebMail.EnableSsl set to true. Bu ayar, SMTP sunucusuna, onları şifreleyerek gönderilen kimlik bilgilerini korur.This setting secures the credentials that are sent to the SMTP server by encrypting them.

    • WebMail.UserName, SMTP sunucusu hesabınızın kullanıcı adına ayarlayın.Set WebMail.UserName to the user name for your SMTP server account.

    • SMTP sunucusu hesabınızın parolasını WebMail.Password ayarlayın.Set WebMail.Password to the password for your SMTP server account.

    • WebMail.From kendi e-posta adresinizi ayarlayın.Set WebMail.From to your own email address. Bu, iletinin gönderildiği e-posta adresidir.This is the email address that the message is sent from.

      Note

      İpucu Bu özelliklerin değerleri hakkında daha fazla bilgi için bkz. ASP.NET Web Pages Için site genelinde davranışı özelleştirmebölümünde e-posta ayarlarını yapılandırma .Tip For additional information about the values for these properties, see Configuring Email Settings in Customizing Site-Wide Behavior for ASP.NET Web Pages.

  7. AppStart. cshtml_ kaydedin ve kapatın.Save and close _AppStart.cshtml.

  8. Varsayılan. cshtml sayfasını bir tarayıcıda çalıştırın.Run the Default.cshtml page in a browser.

    Güvenlik-üyelik-2

    Note

    Bir özelliğin ExtendedMembershipProviderbir örneği olması gerektiğini söyleyen bir hata görürseniz, site ASP.NET Web sayfaları üyelik sistemi (SimpleMembership) kullanmak üzere yapılandırılmamış olabilir.If you see an error that tells you that a property must be an instance of ExtendedMembershipProvider, the site might not be configured to use the ASP.NET Web Pages membership system (SimpleMembership). Bu durum bazen bir barındırma sağlayıcısının sunucusu yerel sunucunuzda farklı yapılandırılmışsa meydana gelebilir.This can sometimes occur if a hosting provider's server is configured differently than your local server. Bu hatayı onarmak için, aşağıdaki öğeyi sitenin Web. config dosyasına ekleyin:To fix this, add the following element to the site's Web.config file:

    <appSettings>
        <add key="enableSimpleMembership" value="true" />
    </appSettings>
    

    Bu öğeyi <configuration> öğesinin bir alt öğesi olarak ve <system.web> öğesinin bir eşi olarak ekleyin.Add this element as a child of the <configuration> element and as a peer of the <system.web> element.

  9. Sayfanın sağ üst köşesinde, Kaydet bağlantısına tıklayın.In the upper-right corner of the page, click the Register link. Register. cshtml sayfası görüntülenir.The Register.cshtml page is displayed.

  10. Bir Kullanıcı adı ve parola girin ve ardından Kaydet' e tıklayın.Enter a user name and password and then click Register.

    Güvenlik-üyelik-3

    Web sitesini Başlatıcı site şablonundan oluşturduğunuzda, sitenin App_Data klasöründe startersite. sdf adlı bir veritabanı oluşturulmuştur.When you created the website from the Starter Site template, a database named StarterSite.sdf was created in the site's App_Data folder. Kayıt sırasında kullanıcı bilgileriniz veritabanına eklenir.During registration, your user information is added to the database. SMTP değerlerini ayarlarsanız, kayıt işlemi tamamlayabilmeniz için kullandığınız e-posta adresine bir ileti gönderilir.If you set the SMTP values, a message is sent to the email address you used so you can finish registering.

    Güvenlik-üyelik-4

  11. E-posta programınıza gidin ve onay kodunuz ve site köprüsü olacak iletiyi bulun.Go to your email program and find the message, which will have your confirmation code and a hyperlink to the site.

  12. Hesabınızı etkinleştirmek için köprüye tıklayın.Click the hyperlink to activate your account. Onay Köprüsü bir kayıt onay sayfası açar.The confirmation hyperlink opens a registration confirmation page.

    Güvenlik-üyelik-5

  13. Oturum aç bağlantısına tıklayın ve ardından kaydettiğiniz hesabı kullanarak oturum açın.Click the Login link, and then log in using the account that you registered.

    Oturum açtıktan sonra, oturum açma ve kayıt bağlantıları bir oturum kapatma bağlantısıyla değiştirilmiştir.After you log in, the Login and Register links are replaced by a Logout link. Oturum açma adınız bağlantı olarak görüntülenir.Your login name is displayed as a link. (Bağlantı, parolanızı değiştirebileceğiniz bir sayfaya gitmenizi sağlar.)(The link lets you go to a page where you can change your password.)

    Güvenlik-üyelik-6

    Note

    Varsayılan olarak, ASP.NET Web sayfaları, kimlik bilgilerini açık metin (insan tarafından okunabilen metin olarak) olarak sunucuya gönderir.By default, ASP.NET web pages send credentials to the server in clear text (as human-readable text). Bir üretim sitesi, sunucusuyla değiştirilen hassas bilgileri şifrelemek için güvenli HTTP ( Güvenli Yuva Katmanı veya SSL olarak da bilinir) kullanmalıdır.A production site should use secure HTTP (https://, also known as the secure sockets layer or SSL) to encrypt sensitive information that's exchanged with the server. Önceki örnekte olduğu gibi WebMail.EnableSsl=true ayarlayarak SSL kullanarak göndermek için e-posta iletileri gerekli olabilir.You can required email messages to be sent using SSL by setting WebMail.EnableSsl=true as in the previous example. SSL hakkında daha fazla bilgi için bkz. Web Iletişimlerini güvenli hale getirme: sertifikalar, SSL ve https://.For more information about SSL, see Securing Web Communications: Certificates, SSL, and https://.

Sitedeki ek üyelik IşlevselliğiAdditional Membership Functionality in the Site

Siteniz, kullanıcıların hesaplarını yönetmesine imkan tanıyan diğer işlevleri içerir.Your site contains other functionality that lets users manage their accounts. Kullanıcılar şunları yapabilir:Users can do the following:

  • Parolalarını değiştirin.Change their passwords. Oturum açtıktan sonra, Kullanıcı adına (bir bağlantı olan) tıklabilirler.After logging in, they can click the user name (which is a link). Bu, bunları yeni bir parola (Account/ChangePassword. cshtml) oluşturabileceğiniz bir sayfaya götürür.This takes them to a page where they can create a new password (Account/ChangePassword.cshtml).
  • Unutulan bir parolayı kurtarın.Recover a forgotten password. Oturum açma sayfasında, kullanıcıları bir e-posta adresi girebilecekleri bir sayfaya (Account/ForgotPassword. cshtml) alan bir bağlantı (parolanızı mı unuttunuz? ) vardır.On the login page, there's a link (Did you forget your password?) that takes users to a page (Account/ForgotPassword.cshtml) where they can enter an email address. Site, yeni bir parola (Account/passwordreset. cshtml) ayarlamak için tıklayabilecekleri bir e-posta iletisi gönderir.The site sends them an email message that has a link that they can click in order to set a new password (Account/PasswordReset.cshtml).

Ayrıca, daha sonra açıklandığı gibi kullanıcıların bir dış site kullanarak da oturum açabilmenizi sağlayabilirsiniz.You can also let users can also log in using an external site, as explained later.

Yalnızca üye sayfası oluşturmaCreating a Members-Only Page

Bu süre boyunca, herkes Web sitenizdeki herhangi bir sayfaya gözatabilirler.For the time being, anyone can browse to any page in your website. Ancak, yalnızca oturum açan kişiler (yani, Üyeler) için kullanılabilir sayfalara sahip olmak isteyebilirsiniz.But you might want to have pages that are available only to people who have logged in (that is, to members). ASP.NET, yalnızca oturum açmış üyeler tarafından erişilebilen sayfalar oluşturmanızı sağlar.ASP.NET lets you create pages that can be accessed only by logged-in members. Genellikle, anonim kullanıcılar yalnızca üye sayfasına erişmeyi denediğinde, bunları oturum açma sayfasına yönlendirirsiniz.Typically, if anonymous users try to access a members-only page, you redirect them to the login page.

Bu yordamda, yalnızca oturum açmış kullanıcılar için kullanılabilir olan sayfaları içerecek bir klasör oluşturacaksınız.In this procedure, you'll create a folder that will contain pages that are available only to logged-in users.

  1. Sitesinin kökünde yeni bir klasör oluşturun.At the root of the site, create a new folder. (Şeritte, Yeni ' nin altındaki oka ve ardından Yeni klasör' i seçin.)(In the ribbon, click the arrow underneath New and then choose New Folder.)

  2. Yeni klasör üyeleriniadlandırın.Name the new folder Members.

  3. Üyeler klasörünün içinde yeni bir sayfa oluşturun ve bunu membersınformation. cshtmlolarak adlandırın.Inside the Members folder, create a new page and named it MembersInformation.cshtml.

  4. Mevcut içeriği şu kod ve biçimlendirmeyle değiştirin:Replace the existing content with the following code and markup:

    @{
        if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }
        Layout = "~/_SiteLayout.cshtml";
        Page.Title = "Members Information";
    }
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <title>Members Information</title>
      </head>
      <body>
        <p>You can only see this information if you've logged into the site.</p>
      </body>
    </html>
    

    Bu kod, Kullanıcı oturum açmışsa true döndüren WebSecurity nesnesinin IsAuthenticated özelliğini sınar.This code tests the IsAuthenticated property of the WebSecurity object, which returns true if the user has logged in. Kullanıcı oturum açmadıysa, kod, kullanıcıyı Hesap klasöründeki login. cshtml sayfasına göndermek için Response.Redirect çağırır.If the user is not logged in, the code calls Response.Redirect to send the user to the Login.cshtml page in the Account folder.

    Yeniden yönlendirmenin URL 'SI, geçerli sayfanın yolunu ayarlamak için Request.Url.LocalPath kullanan returnUrl bir sorgu dizesi değeri içerir.The URL of the redirection includes a returnUrl query string value that uses Request.Url.LocalPath to set the path of the current page. Sorgu dizesindeki returnUrl değerini şu şekilde ayarlarsanız (ve dönüş URL 'SI bir yerel yoldaysa), oturum açma sayfası oturum açtıktan sonra kullanıcıları bu sayfaya döndürür.If you set the returnUrl value in the query string like this (and if the return URL is a local path), the login page will return users to this page after they log in.

    Kod ayrıca, Düzen sayfası olarak _SiteLayout. cshtml sayfasını da ayarlar.The code also sets _SiteLayout.cshtml page as its layout page. (Düzen sayfaları hakkında daha fazla bilgi için bkz. ASP.NET Web Pages sitelerinde tutarlı düzen oluşturma.)(For more about layout pages, see Creating a Consistent Layout in ASP.NET Web Pages Sites.)

  5. Siteyi çalıştırın.Run the site. Hala oturum açtıysanız sayfanın üst kısmındaki Oturumu Kapat düğmesine tıklayın.If you're still logged in, click the Logout button at the top of the page.

  6. Tarayıcıda /members/membersınformationsayfasını isteyin.In the browser, request the page /Members/MembersInformation. Örneğin, URL şöyle görünebilir:For example, the URL might look like this:

    http://localhost:38366/Members/MembersInformation

    (Bağlantı noktası numarası (38366) büyük olasılıkla URL 'niz içinde farklı olacaktır.)(The port number (38366) will probably be different in your URL.)

    Oturum açmadığınızda login. cshtml sayfasına yönlendirilirsiniz.You're redirected to the Login.cshtml page, because you aren't logged in.

  7. Daha önce oluşturduğunuz hesabı kullanarak oturum açın.Log in using the account you created earlier. Membersınformation sayfasına geri yönlendirilirsiniz.You're redirected back to the MembersInformation page. Oturum açtığınızdan, bu kez sayfa içeriğini görürsünüz.Because you're logged in, this time you see the page contents.

Birden çok sayfaya erişimin güvenliğini sağlamak için bunu yapabilirsiniz:To secure access to multiple pages, you can do this:

  • Her sayfaya güvenlik denetimini ekleyin.Add the security check to each page.
  • Korumalı sayfaları tutan klasörde bir _PageStart. cshtml sayfası oluşturun ve güvenlik denetimini buraya ekleyin.Create a _PageStart.cshtml page in the folder where you keep protected pages, and add the security check there. _PageStart. cshtml sayfası, klasördeki tüm sayfalar için genel sayfa türü olarak davranır.The _PageStart.cshtml page acts as a kind of global page for all the pages in the folder. Bu teknik, ASP.NET Web sayfaları Için site genelinde davranışı özelleştirme konusundadaha ayrıntılı olarak açıklanmıştır.This technique is explained in more detail in Customizing Site-Wide Behavior for ASP.NET Web Pages.

Kullanıcı grupları (roller) için güvenlik oluşturmaCreating Security for Groups of Users (Roles)

Sitenizin çok sayıda üyesi varsa, bir sayfa görmeinizden önce her kullanıcının iznini tek tek denetlemek verimli değildir.If your site has a lot of members, it's not efficient to check permission for each user individually before you let them see a page. Bunun yerine, bireysel üyelerin ait olduğu grupları veya rollerioluşturmak için kullanabilirsiniz.What you can do instead is to create groups, or roles, that individual members belong to. Ardından, izinleri role göre denetleyebilirsiniz.You can then check permissions based on role. Bu bölümde, bir "yönetici" rolü oluşturacak ve ardından bu role sahip olan kullanıcılar tarafından erişilebilen bir sayfa oluşturacaksınız.In this section, you'll create an "admin" role and then create a page that's accessible to users who are in (who belong to) that role.

ASP.NET üyelik sistemi, rolleri destekleyecek şekilde ayarlanmıştır.The ASP.NET membership system is set up to support roles. Ancak, üyelik kaydı ve oturum açmanın aksine, Başlatıcı site şablonu rolleri yönetmenize yardımcı olan sayfalar içermez.However, unlike membership registration and login, the Starter Site template does not contain pages that help you manage roles. (Rolleri yönetmek, Kullanıcı görevi yerine bir yönetim görevidir.) Ancak, WebMatrix 'teki üyelik veritabanına doğrudan gruplar ekleyebilirsiniz.(Managing roles is an administrative task rather than a user task.) However, you can add groups directly in the membership database in WebMatrix.

  1. WebMatrix 'te veritabanları çalışma alanı seçicisine tıklayın.In WebMatrix, click the Databases workspace selector.

  2. Sol bölmede, Startersite. sdf düğümünü açın, Tablolar düğümünü açın ve ardından Web sayfaları_roller tablosuna çift tıklayın.In the left pane, open the StarterSite.sdf node, open the Tables node, and then double-click the webpages_Roles table.

    Güvenlik-üyelik-7

  3. "admin"adlı bir rol ekleyin.Add a role named "admin". RoleID alanı otomatik olarak doldurulur.The RoleId field is filled in automatically. (Birincil anahtardır ve ASP.NET Web sayfaları sitelerinde bir veritabanıyla çalışmaya girişbölümünde açıklandığı gibi bir belirleme alanı olarak ayarlanmıştır.)(It's the primary key and has been set to be an identify field, as explained in Introduction to Working with a Database in ASP.NET Web Pages Sites.)

  4. RoleID alanı için değerin ne olduğunu bir yere göz atın.Take note of what the value is for the RoleId field. (Bu, tanımladığınız ilk rollükdür, 1 olur.)(If this is the first role you're defining, it will be 1.)

    Güvenlik-üyelik-8

  5. Web sayfası_rolleri tablosunu kapatın.Close the webpages_Roles table.

  6. USERPROFILE tablosunu açın.Open the UserProfile table.

  7. Tablodaki bir veya daha fazla kullanıcının Kullanıcı kimliği değerini bir yere ve ardından tabloyu kapatmaya dikkat edin.Make a note of the UserId value of one or more of the users in the table and then close the table.

  8. Web sayfalarını_Userınroles tablosunu açın ve tabloya bir UserID ve RoleID değeri girin.Open the webpages_UserInRoles table and enter a UserID and a RoleID value into the table. Örneğin, Kullanıcı 2 ' yi "yönetici" rolüne koymak için şu değerleri girersiniz:For example, to put user 2 into the "admin" role, you'd enter these values:

    Güvenlik-üyelik-9

  9. Web sayfalarını_Usersınroles tablosunu kapatın.Close the webpages_UsersInRoles table.

    Artık rollere sahip olduğunuza göre, bu roldeki kullanıcılar tarafından erişilebilen bir sayfa yapılandırabilirsiniz.Now that you have roles defined, you can configure a page that's accessible to users who are in that role.

  10. Web sitesi kök klasöründe, Adminerror. cshtml adlı yeni bir sayfa oluşturun ve var olan içeriği aşağıdaki kodla değiştirin.In the website root folder, create a new page named AdminError.cshtml and replace the existing content with the following code. Bu, kullanıcıların bir sayfaya erişimine izin verilmediği durumlarda yeniden yönlendirileceği sayfa olacaktır.This will be the page that users are redirected to if they aren't allowed access to a page.

    @{
        Layout = "~/_SiteLayout.cshtml";
        PageData["Title"] = "Admin-only Error";
    }
    <p>You must log in as an admin to access that page.</p>
    
  11. Web sitesi kök klasöründe, Adminonly. cshtml adlı yeni bir sayfa oluşturun ve mevcut kodu şu kodla değiştirin:In the website root folder, create a new page named AdminOnly.cshtml and replace the existing code with the following code:

    @{
        Layout = "~/_SiteLayout.cshtml";
        PageData["Title"] = "Administrators only";
    }
    
    @if ( Roles.IsUserInRole("admin")) {
        <span> Welcome <b>@WebSecurity.CurrentUserName</b>! </span>
    }
    else {
         Response.Redirect("~/AdminError");
    }
    

    Roles.IsUserInRole yöntemi, geçerli kullanıcı belirtilen rolün üyesiyse (Bu durumda "Yönetici" rolü) true döndürür.The Roles.IsUserInRole method returns true if the current user is a member of the specified role (in this case, the "admin" role).

  12. Varsayılan. cshtml 'yi bir tarayıcıda çalıştırın, ancak oturum açın.Run Default.cshtml in a browser, but don't log in. (Zaten oturum açtıysanız, oturumunuzu açın.)(If you're already logged in, log out.)

  13. Tarayıcının adres çubuğunda, URL 'ye yalnızca adminadd .In the browser's address bar, add AdminOnly in the URL. (Başka bir deyişle, Adminonly. cshtml dosyasını isteyin.) Şu anda "yönetici" rolünde bir kullanıcı olarak oturum açmadığınızı, Adminerror. cshtml sayfasına yönlendirilirsiniz.(In other words, request the AdminOnly.cshtml file.) You're redirected to the AdminError.cshtml page, because you aren't currently logged in as a user in the "admin" role.

  14. Default. cshtml ' ye dönün ve "yönetici" rolüne eklediğiniz kullanıcı olarak oturum açın.Return to Default.cshtml and log in as the user you added to the "admin" role.

  15. Adminonly. cshtml sayfasına gidin.Browse to AdminOnly.cshtml page. Bu kez sayfayı görürsünüz.This time you see the page.

Otomatikleştirilmiş programların Web sitenize katılmasını önlemekPreventing Automated Programs from Joining Your Website

Oturum açma sayfası otomatik programları (bazen Web robots veya botlarıolarak adlandırılır) Web siteniz ile Kaydolmayacak şekilde durdurmaz.The login page will not stop automated programs (sometimes referred to as web robots or bots) from registering with your website. Bu yordamda, kayıt sayfası için bir ReCaptcha testinin nasıl etkinleştirileceği açıklanmaktadır.This procedure describes how to enable a ReCaptcha test for the registration page.

/media/38777/ch16securitymembership-18.jpg

  1. Web sitenizi ReCaptcha.Net adresinden kaydedin (http://recaptcha.net).Register your website at ReCaptcha.Net (http://recaptcha.net). Kayıt tamamlandığında, bir ortak anahtar ve özel anahtar alırsınız.When you've completed registration, you'll get a public key and a private key.

  2. Henüz yapmadıysanız, bir ASP.NET Web sayfaları sitesine yardımcılar yüklemebölümünde açıklandığı gibi, ASP.NET Web yardımcıları kitaplığı 'nı Web sitenize ekleyin.Add the ASP.NET Web Helpers Library to your website as described in Installing Helpers in an ASP.NET Web Pages Site, if you haven't already.

  3. Hesap klasöründe, register. cshtmladlı dosyayı açın.In the Account folder, open the file named Register.cshtml.

  4. Sayfanın üst kısmındaki kodda aşağıdaki satırları bulun ve // açıklama karakterlerini kaldırarak açıklamaları kaldırın:In the code at the top of the page, find the following lines and uncomment them by removing the // comment characters:

    if (!ReCaptcha.Validate("PRIVATE_KEY")) {
        ModelState.AddError("recaptcha", "Captcha response was not correct");
    }
    
  5. PRIVATE_KEY kendi ReCaptcha özel anahtarınızla değiştirin.Replace PRIVATE_KEY with your own ReCaptcha private key.

  6. Sayfanın biçimlendirmesinde, @* kaldırın ve sayfa biçimlendirmesinde aşağıdaki satırların etrafına *@ yorum yapın:In the markup of the page, remove the @* and *@ commenting characters from around the following lines in the page markup:

    @ReCaptcha.GetHtml("PUBLIC_KEY", theme: "white")
    @Html.ValidationMessage("recaptcha")
    
  7. PUBLIC_KEY anahtarını anahtarınızla değiştirin.Replace PUBLIC_KEY with your key.

  8. Henüz kaldırmadıysanız, "CAPTCHA doğrulamasını etkinleştirmek Için..." ile başlayan metin içeren <div> öğesini kaldırın.If you haven't removed it already, remove the <div> element that contains text that starts with "To enable CAPTCHA verification ...". (Tüm <div> öğesini ve içeriğini kaldırın.)(Remove the entire <div> element and its contents.)

  9. Varsayılan. cshtml 'yi bir tarayıcıda çalıştırın.Run Default.cshtml in a browser. Sitede oturum açtıysanız, oturum kapatma bağlantısına tıklayın.If you're logged into the site, click the Logout link.

  10. Kayıt bağlantısına tıklayın ve CAPTCHA testini kullanarak kaydı test edin.Click the Register link and test the registration using the CAPTCHA test.

    Güvenlik-üyelik-10

ReCaptcha Yardımcısı hakkında daha fazla bilgi için bkz. BIR CATPCHA kullanarak otomatik programların (botların) ASP.NET Web sitenizi kullanmasını engelleyin.For more information about the ReCaptcha helper, see Using a CATPCHA to Prevent Automated Programs (Bots) from Using Your ASP.NET Web Site.

Dış site kullanarak kullanıcıların oturum açmasına izin vermeLetting Users Log In Using an External Site

Başlatıcı site şablonu, kullanıcıların Facebook, Windows Live, Twitter, Google veya Yahoo kullanarak oturum açmasına izin veren kod ve biçimlendirmeyi içerir.The Starter Site template includes code and markup that lets users log in using Facebook, Windows Live, Twitter, Google, or Yahoo. Bu işlev varsayılan olarak etkin değildir.By default, this functionality is not enabled. Bu dış sağlayıcıları kullanarak kullanıcıların oturum açmasına izin verme kullanımı için genel yordam bu şekilde belirlenir:The general procedure for using letting users log in using these external providers is this:

  • Hangi dış sitelerden desteklemek istediğinize karar verin.Decide which of the external sites you want to support.
  • Gerekirse, bu siteye gidin ve bir oturum açma uygulaması ayarlayın.If required, go to that site and set up a login app. (Örneğin, Facebook oturumlarına izin vermek için bunu yapmanız gerekir.)(For example, you have to do this in order to allow Facebook logins.)
  • Sitenizde sağlayıcıyı yapılandırın.In your site, configure the provider. Çoğu durumda, _AppStart. cshtml dosyasındaki bazı kodların açıklamalarını oluşturmanız yeterlidir.In most cases, you just have to uncomment some code in the _AppStart.cshtml file.
  • Kayıt sayfasına, kullanıcıların oturum açmak için dış siteye bağlantı eklemesini sağlayan biçimlendirme ekleyin.Add markup to the registration page that lets people link to the external site for logging in. Genellikle gereken biçimlendirmeyi kopyalayabilir ve metni biraz değiştirebilirsiniz.You can usually copy the markup you need and change the text slightly.

Bir ASP.NET Web Pages sitesindeki dış sitelerden oturum açmayı etkinleştirmekonusunda adım adım yönergeleri bulabilirsiniz.You can find step-by-step instructions in the topic Enabling Login from External Sites in an ASP.NET Web Pages Site.

Kullanıcı başka bir siteden oturum açtıktan sonra, kullanıcı sitenize geri döner ve bu oturum açma bilgilerini siteyle ilişkilendirir .After a user logs in from another site, the user returns to your site and associates that login with your site. Aslında bu, sitenizde kullanıcının dış oturum açması için bir Üyelik girişi oluşturur.In effect, this creates a membership entry in your site for the user's external login. Bu, dış oturum açma ile üyelik (roller gibi) için normal tesislerini kullanmanıza olanak sağlar.This lets you use the normal facilities of membership (such as roles) with the external login.

Mevcut bir Web sitesine güvenlik eklemeAdding Security to an Existing Website

Bu makalede daha önce bahsedilen yordam, Web sitesi güvenliğinin temeli olarak Başlatıcı site şablonunu kullanmaya dayanır.The procedure earlier in this article relies on using the Starter Site template as the basis for website security. Başlangıç sitesi şablonundan başlayabilmeniz veya ilgili sayfaları bu şablona dayalı bir siteden kopyalamak için pratik değilse, kendi sitenizde aynı güvenlik türünü kendiniz kodlayarak uygulayabilirsiniz.If it isn't practical for you to start from the Starter Site template or to copy the relevant pages from a site based on that template, you can implement the same type of security in your own site by coding it yourself. Aynı sayfa türlerini (kayıt, oturum açma vb.) oluşturun ve ardından üyeliği ayarlamak için yardımcıları ve sınıfları kullanın.You create the same types of pages — registration, login, and so on — and then use helpers and classes to set up membership.

Temel işlem, ASP.net Razor güvenliği uygulamak için en temel yolgönderisine Web günlüğünde açıklanmıştır.The basic process is described in the blog post THE most basic way to implement ASP.NET Razor security. İşin çoğu, WebSecurity Yardımcısı 'nın aşağıdaki yöntemleri ve özellikleri kullanılarak yapılır:Most of the work is done using the following methods and properties of the WebSecurity helper:

Rolleri yönetmek için, blog girişinde açıklandığı gibi rolleri ve Üyelik sınıflarını kullanabilirsiniz.To manage roles, you can use the Roles and Membership classes, as described in the blog entry.

Ek KaynaklarAdditional Resources