1 / 30

Integrating Security Roles into Microsoft Silverlight Applications

DEV356. Integrating Security Roles into Microsoft Silverlight Applications. Dan Wahlin Wahlin Consulting. Agenda. Silverlight Security Options Accessing User Identity Information Accessing User Roles Creating a SecurityManager class. Silverlight Security Options.

gustav
Download Presentation

Integrating Security Roles into Microsoft Silverlight Applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DEV356 Integrating Security Roles into Microsoft Silverlight Applications Dan Wahlin Wahlin Consulting

  2. Agenda • Silverlight Security Options • Accessing User Identity Information • Accessing User Roles • Creating a SecurityManager class

  3. Silverlight Security Options • Silverlight Authentication: • Windows • Forms • Custom • Silverlight Authorization: • Active Directory Groups • Forms Roles • Custom Roles

  4. Windows Authentication Options • Option 1: Secure page hosting Silverlight control • Easiest • User prompted • Silverlight app secured • Option 2: Secure backend services • Silverlight app is anonymous • Calls to service require credentials • Client HTTP stack can be used

  5. Using the Client HTTP Stack • //Set once in App.xaml.cs • HttpWebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); • .... • WebClientwc = new WebClient(); • wc.UseDefaultCredentials = false; • wc.Credentials = new NetworkCredential("username", "password", "domain");

  6. Agenda • Securing Silverlight Applications • Accessing User Identity Information • Accessing User Roles • Creating a SecurityManager class

  7. Accessing a User's Credentials • Silverlight does not support accessing the User object directly • User.Identity.Name • Options for accessing the user name: • initParams (be careful!) • Use a service • WCF RIA Services

  8. Passing the User Name with initParams • User Name can be passed dynamically into Silverlight using initParams Be Careful!

  9. Using initParams <param name="initParams" value="UserName=<%=User.Identity.Name%>" /> … private void Application_Startup(object sender, StartupEventArgs e) { ProcessInitParams(e.InitParams); this.RootVisual = new MainPage(); } void ProcessInitParams(IDictionary<string, string> initParams) { if (initParams != null) { foreach (var item in initParams) { this.Resources.Add(item.Key, item.Value); } } }

  10. Creating a User Credentials Service • Create a User Credentials WCF/ASMX service: • Service handles returning authenticated user's information • No risk of a spoofed User Name as with initParams • Service can return additional information such as roles • WCF RIA Services does this out-of-the-box

  11. Returning a User Name from a Service [OperationContract] public string GetLoggedInUserName() { return new SecurityRepository() .GetUserName(OperationContext.Current); } public class SecurityRepository { public string GetUserName(OperationContextopContext) { return (opContext.ServiceSecurityContext != null && opContext.ServiceSecurityContext.WindowsIdentity != null) ? opContext.ServiceSecurityContext.WindowsIdentity.Name : null; } }

  12. Accessing an Authenticated User's User Name demo

  13. Agenda • Silverlight Security Options • Accessing User Identity Information • Accessing User Roles • Creating a SecurityManager class

  14. Accessing User Roles • Options: • Pass user roles into application using initParams • Create a security service operation that returns roles Be Careful!

  15. Returning Roles from a Service [OperationContract] public List<Role> GetRoles() { return new SecurityRepository().GetRoles(OperationContext.Current); } public class SecurityRepository { public List<Role> GetRoles(OperationContextopContext) { varuserName = GetUserName(opContext); //Get roles from Active Directory, Database, or elsewhere } }

  16. Accessing User Roles demo

  17. Agenda • Silverlight Security Options • Accessing User Identity Information • Accessing User Roles • Creating a SecurityManager class

  18. How do you access and manage user names and roles in a Silverlight application?

  19. Creating a SecurityManager Class • SecurityManager class can act as client-side gateway to user credentials: • Accesses user credentials asynchronously • Determine user role(s) • Determine access to view • MVVM compliant • Add to ViewModel base class through aggregation

  20. The SecurityManager Class [Export(typeof(ISecurityManager))] [PartCreationPolicy(CreationPolicy.Shared)] public class SecurityManager : ISecurityManager { public event EventHandlerUserSecurityLoaded; public boolIsUserSecurityLoadComplete { get; set; } public ObservableCollection<Role> UserRoles { get; set; } public string UserName { get; set; } public boolIsAdmin { get; } public boolIsInUserRole { get; } public boolIsValidUser { get; } private void GetUserSecurityDetails() {} public boolCheckUserAccessToUri(Uri uri) {} public boolUserIsInRole(string role) {} public boolUserIsInAnyRole(params string[] roles) {} }

  21. Using the SecurityManager Class public class ViewModelBase: INotifyPropertyChanged { [Import] public ISecurityManagerSecurityManager { get; set; } } public class MainPageViewModel : ViewModelBase { public MainPageViewModel() { if (!IsDesignTime) SecurityManager.UserSecurityLoaded += SecurityManagerUserSecurityLoaded; } void SecurityManagerUserSecurityLoaded(object sender, EventArgs e) { IsAdmin = SecurityManager.IsAdmin; //Set INPC property UserName = SecurityManager.UserName; //Set INPC property } }

  22. Creating and using a SecurityManager Class demo

  23. Summary • Silverlight doesn’t provide direct access to user credentials • Different techniques can be used to access a user name and roles: • Pass into initParams (be careful!) • Access data through a security service • Use WCF RIA Service's WebContext class • The SecurityManager class can simplify the process of working with user credentials • Handles async calls to security service • Stores user credentials and provides security logic • Integrates well with MVVM

  24. Required Slide Speakers, please list the Breakout Sessions, Interactive Discussions, Labs, Demo Stations and Certification Exam that relate to your session. Also indicate when they can find you staffing in the TLC. Related Content • DEV209: From Zero to Silverlight in 75 Minutes • DEV210: Microsoft Silverlight, WCF RIA Services and Your Business Objects • DEV331: A Lap around Microsoft Silverlight 5 • DEV386HOL: Microsoft Silverlight Data Binding • DEV388HOL: Web Services and Microsoft Silverlight • DEV390HOL: Using the MVVM Pattern in Microsoft Silverlight Applications

  25. Blog http://weblogs.asp.net/dwahlin Twitter @DanWahlin Contact Info Blog http://weblogs.asp.net/dwahlin Twitter @DanWahlin

  26. Web Track Resources • http://www.asp.net/ • http://www.silverlight.net/ • http://www.microsoft.com/web/gallery/ • http://www.iis.net/ • http://weblogs.asp.net/Scottgu/ • http://www.hanselman.com/blog/

  27. Resources • Connect. Share. Discuss. http://northamerica.msteched.com Learning • Sessions On-Demand & Community • Microsoft Certification & Training Resources www.microsoft.com/teched www.microsoft.com/learning • Resources for IT Professionals • Resources for Developers • http://microsoft.com/technet • http://microsoft.com/msdn

  28. Complete an evaluation on CommNet and enter to win!

More Related