Building Secure ASP.NET Applications Authentication, Authorization, and Secure Communication Web Server Database Server IIS SQL Server Clients ASP.NET IIS ASP.NET Authentication, Authorization and Secure Communication Enterprise Services (COM+) Web Services IIS ASP.NET .NET Remoting Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, e-mail address, logo, person, place or event is intended or should be inferred. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation. Microsoft, MS-DOS, Windows, Active Directory, C#, Visual Basic, Visual Studio, and Win32 are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. © 2002 Microsoft Corporation. All rights reserved. Version 1.0 The names of actual companies and products mentioned herein may be the trademarks of their respective owners. Contents About This Book xxi Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Applies To . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi What This Guide is About . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Who Should Read This Guide? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii What You Must Know . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Feedback and Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii The Team That Brought You This Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Contributors and Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiv At a Glance xxvii Chapter 1 – Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii Chapter 2 – Security Model for ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . xxvii Chapter 3 – Authentication and Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii Chapter 4 – Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix Chapter 5 – Intranet Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxx Chapter 6 – Extranet Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxii Chapter 7 – Internet Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii Chapter 8 – ASP.NET Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiv Chapter 9 – Enterprise Services Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv Chapter 10 – Web Services Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxvii Chapter 11 – .NET Remoting Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxviii Chapter 12 – Data Access Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxix Chapter 13 – Troubleshooting Security Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xl Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xl Chapter 1 Introduction 1 The Connected Landscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 What Are the Goals of This Guide? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 How You Should Read This Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Organization of the Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Part I, Security Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Part II, Application Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Part III, Securing the Tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Part IV, Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Key Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Contentsiv Chapter 2 Security Model for ASP.NET Applications 9 .NET Web Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Logical Tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Physical Deployment Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Implementation Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Enterprise Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 .NET Remoting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ADO.NET and SQL Server 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Internet Protocol Security (IPSec) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Secure Sockets Layer (SSL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Security Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Security Across the Tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Gatekeepers and Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Identities and Principals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 WindowsPrincipal and WindowsIdentity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 GenericPrincipal and Associated Identity Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 24 ASP.NET and HttpContext.User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Remoting and Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Chapter 3 Authentication and Authorization 29 Designing an Authentication and Authorization Strategy . . . . . . . . . . . . . . . . . . . . . . . 30 Identify Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Choose an Authorization Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Choose the Identities Used for Resource Access . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Consider Identity Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Choose an Authentication Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Decide How to Flow Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Authorization Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Role Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Resource Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Resource Access Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 The Trusted Subsystem Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 The Impersonation / Delegation Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Choosing a Resource Access Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Flowing Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Application vs. Operating System Identity Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Impersonation and Delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Contents v Role-Based Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 .NET Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Enterprise Services (COM+) Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 SQL Server User Defined Database Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 SQL Server Application Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 .NET Roles versus Enterprise Services (COM+) Roles . . . . . . . . . . . . . . . . . . . . . . . 45 Using .NET Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Choosing an Authentication Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Internet Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Intranet / Extranet Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Authentication Mechanism Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Chapter 4 Secure Communication 55 Know What to Secure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Using SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 IPSec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Using IPSec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 RPC Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Using RPC Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Point to Point Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Browser to Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Web Server to Remote Application Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Application Server to Database Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Choosing Between IPSec and SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Farming and Load Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Chapter 5 Intranet Security 65 ASP.NET to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Related Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Contentsvi ASP.NET to Enterprise Services to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 ASP.NET to Web Services to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 ASP.NET to Remoting to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Flowing the Original Caller to the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 ASP.NET to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 ASP.NET to Enterprise Services to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Chapter 6 Extranet Security 103 Exposing a Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Q&A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Exposing a Web Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Scenario Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Contents vii Chapter 7 Internet Security 119 ASP.NET to SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Related Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 ASP.NET to Remote Enterprise Services to SQL Server . . . . . . . . . . . . . . . . . . . . . . . 127 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Secure the Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 The Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Security Configuration Steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Related Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Chapter 8 ASP.NET Security 137 ASP.NET Security Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Gatekeepers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Authentication and Authorization Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Available Authorization Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Windows Authentication with Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Windows Authentication without Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Windows Authentication Using a Fixed Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Forms Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Passport Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Configuring Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Configure IIS Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Configure ASP.NET Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Secure Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Programming Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 An Authorization Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Creating a Custom IPrincipal class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Windows Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Forms Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Development Steps for Forms Authentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Forms Implementation Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Hosting Multiple Applications Using Forms Authentication . . . . . . . . . . . . . . . . . . 168 Cookieless Forms Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Contentsviii Passport Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Custom Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Process Identity for ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Use a Least Privileged Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Avoid Running as SYSTEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Using the Default ASPNET Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Impersonation and Local Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Impersonation and Remote Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Impersonation and Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Accessing System Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Accessing the Event Log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Accessing the Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Accessing COM Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Apartment Model Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Accessing Network Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Using the ASP.NET Process Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Using a Serviced Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Using the Anonymous Internet User Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Using LogonUser and Impersonating a Specific Windows Identity . . . . . . . . . . . . . 182 Using the Original Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Accessing Files on a UNC File Share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Accessing Non-Windows Network Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Storing Secrets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Options for Storing Secrets in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Consider Storing Secrets in Files on Separate Logical Volumes . . . . . . . . . . . . . . . 186 Securing Session and View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Securing View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Securing Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Securing SQL Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Web Farm Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 DPAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Using Forms Authentication in a Web Farm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 The <machineKey> Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Chapter 9 Enterprise Services Security 195 Security Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Gatekeepers and Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Use Server Applications for Increased Security . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Security for Server and Library Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Code Access Security Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Contents ix Configuring Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Configuring a Server Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Configuring an ASP.NET Client Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Configuring Impersonation Levels for an Enterprise Services Application . . . . . . . . 208 Programming Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Programmatic Role-Based Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Identifying Callers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Choosing a Process Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Never Run as the Interactive User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Use a Least-Privileged Custom Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Accessing Network Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Using the Original Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Using the Current Process Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Using a Specific Service Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Flowing the Original Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Calling CoImpersonateClient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 RPC Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Building Serviced Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 DLL Locking Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Versioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 QueryInterface Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 DCOM and Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Calling Serviced Components from ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Caller’s Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Use Windows Authentication and Impersonation Within the Web-based Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Configure Authentication and Impersonation within Machine.config . . . . . . . . . . . . 218 Configuring Interface Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Security Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Enterprise Services (COM+) Roles and .NET Roles . . . . . . . . . . . . . . . . . . . . . . . . 222 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Chapter 10 Web Services Security 227 Web Service Security Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Platform/Transport Level (Point-to-Point) Security . . . . . . . . . . . . . . . . . . . . . . . . . 228 Application Level Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Message Level (End-to-End) Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Platform/Transport Security Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Gatekeepers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Contentsx Authentication and Authorization Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Windows Authentication with Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Windows Authentication without Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Windows Authentication Using a Fixed Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Configuring Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Configure IIS Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Configure ASP .NET Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Secure Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Disable HTTP-GET, HTTP-POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Passing Credentials for Authentication to Web Services . . . . . . . . . . . . . . . . . . . . . . 240 Specifying Client Credentials for Windows Authentication . . . . . . . . . . . . . . . . . . . 241 Calling Web Services from Non-Windows Clients . . . . . . . . . . . . . . . . . . . . . . . . . 243 Proxy Server Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Flowing the Original Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Default Credentials with Kerberos Delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Explicit Credentials with Basic or Forms Authentication . . . . . . . . . . . . . . . . . . . . 247 Trusted Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Flowing the Caller’s Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Configuration Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Accessing System Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Accessing Network Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Accessing COM Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Using Client Certificates with Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Authenticating Web Browser Clients with Certificates . . . . . . . . . . . . . . . . . . . . . . 254 Using the Trusted Subsystem Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Secure Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Transport Level Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Message Level Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Chapter 11 .NET Remoting Security 261 .NET Remoting Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Remoting Sinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Anatomy of a Request When Hosting in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . 264 ASP.NET and the HTTP Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 .NET Remoting Gatekeepers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Hosting in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Hosting in a Windows Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Using File Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Authentication and Authorization Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 [...]... Server IIS Secure Communication (SSL / IPSec) xxii ASP. NET ASP. NET IIS ASP. NET Web Services Enterprise Services (COM+) Authorization NTFS Perms IP Restrictions IIS ASP. NET NET Remoting Authentication Windows Forms Passport None (Custom) Authorization URL Auth File Auth NET Roles Enterprise Services Authentication RPC Authorization COM+ Roles NTFS Perms SQL Server SQL Server Database Server Figure 1 NET Web... ASP. NET q Access local and network resources using the ASP. NET process identity q Access remote SQL Server databases using the local ASPNET account q Call COM objects from ASP. NET q Effectively use the anonymous Internet user account in Web hosting environments q Store secrets in an ASP. NET Web application q Secure session and view state q Configure ASP. NET security in Web Farm scenarios Chapter 9 – Enterprise... Security configuration for ASP. NET to remote Enterprise Services to SQL Server Read this chapter to learn how to: q Use Forms authentication with a SQL Server credential database q Avoid storing passwords in the credential database q Authorize Internet users with URL Authorization and NET roles xxxiv Building Secure ASP. NET Applications q q q q Use Windows authentication from an ASP. NET Web application to... and ASP. NET gatekeepers q Configure and use ASP. NET File authorization q Configure and use ASP. NET URL authorization q Implement declarative, imperative and programmatic role-based security, using principal permission demands and IPrincipal.IsInRole q Know when and when not to use impersonation within an ASP. NET Web application q Choose an appropriate account to run ASP. NET q Access local and network... the following Internet application scenarios: q ASP. NET to SQL Server q ASP. NET to Remote Enterprise Services to SQL Server This scenario is shown in Figure 7 NTFS Permissions URL Authorization (Authorization) (Authorization) Integrated Windows (Authentication) Require SSL Windows (Privacy/Integrity) Web Server Alice Mary IIS ASPNET (Process Identity) SOAP ASP. NET (Authentication) ASP. NET (Web Services... plans to build, or is currently building NET Web applications using one or more of the following technologies, you should read this guide q ASP. NET q Web Services q Enterprise Services q Remoting q ADO .NET What You Must Know To most effectively use this guide to design and build secure NET Web applications, you should already have some familiarity and experience with NET development techniques and technologies... (COM+) roles q Effectively use impersonation within an ASP. NET Web application xxxii Building Secure ASP. NET Applications Chapter 6 – Extranet Security This chapter presents a set of common extranet application scenarios and for each one presents recommended security configurations, configuration steps and analysis This chapter covers the following extranet scenarios q Exposing a Web Service (B2B partner... presented in later chapters Chapter 2 – Security Model for ASP. NET Applications This chapter describes the common characteristics of NET Web applications from a security perspective and introduces the NET Web application security model It also introduces the set of core implementation technologies that you will use to build secure NET Web applications The full range of gatekeepers that allow you to... Figure 4 q ASP. NET to Enterprise Services to SQL Server q ASP. NET to Web Services to SQL Server q ASP. NET to Remoting to SQL Server q Flowing the original caller to the database This includes multi-tier Kerberos delegation scenarios, as shown in Figure 5 NTFS Permissions File Authorization NET Roles SQL Permissions Database Roles (Authorization) (Authorization) (Authorization) Alice Mary ASP. NET Process... Server through a firewall Secure sensitive data with a combination of SSL and IPSec Communicate from an ASP. NET Web application to a remote Enterprise Services application through a firewall by using SOAP Secure calls to serviced component in the application’s middle tier Chapter 8 – ASP. NET Security This chapter provides in-depth security recommendations for ASP. NET Web applications This chapter covers . Building Secure ASP. NET Applications Authentication, Authorization, and Secure Communication Web Server Database Server IIS SQL Server Clients ASP. NET IIS ASP. NET Authentication,. Server Clients ASP. NET IIS ASP. NET Authentication, Authorization and Secure Communication Enterprise Services (COM+) Web Services IIS ASP. NET .NET Remoting Information in this document, including URL and other Internet Web site references,. . . . . . . . . . . . . . . . . . . . 7 Contentsiv Chapter 2 Security Model for ASP. NET Applications 9 .NET Web Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .