Tôi làm cách nào để sử dụng Trình quản lý vai trò trong Dịch vụ WCF?Tôi làm cách nào để sử dụng Trình quản lý vai trò trong Dịch vụ WCF?
Trong ứng dụng .NET của tôi, tôi có thể giới hạn một lớp hoặc phương thức bằng thẻ [Authorize(Roles=)]
. Làm thế nào tôi có thể kích hoạt tính năng này cho Dịch vụ WCF của tôi?
Tôi hiện đang có các thiết lập ràng buộc sau cho mỗi thiết bị đầu cuối:
<webHttpBinding>
<binding name="TransportSecurity" maxReceivedMessageSize="5242880">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
Vì tôi muốn có người dùng đăng nhập vào và nhận được một cookie với hiệu trưởng, tôi cần phải thay đổi điều này khác loại clientCredentialType
?
Sửa 1:
Đây là sử dụng REST, không SOAP. Nó cũng lưu ý rằng điều quan trọng là nó hoạt động với các thiết bị di động (android, iPhone) và có thể sử dụng cookie để duy trì một phiên. Cho đến nay, tôi đã không thể làm việc này, sử dụng đoạn mã sau/config:
Config File:
<roleManager enabled="true" defaultProvider="ActiveDirectoryRoleProvider" cacheRolesInCookie="true" cookieName="RoleCookie" cookiePath="/" cookieTimeout="30" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All">
<providers>
<clear />
<add name="ActiveDirectoryRoleProvider" connectionStringName="ADServices" connectionUsername="" connectionPassword="" attributeMapUsername="sAMAccountName" type="" />
</providers>
</roleManager>
<membership defaultProvider="MembershipADProvider">
<providers>
<add name="MembershipADProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="" connectionStringName="ADServices" connectionUsername="" connectionPassword="" attributeMapUsername="sAMAccountName" />
</providers>
</membership>
<bindings>
<webHttpBinding> <!-- webHttpBinding is for REST -->
<binding name="TransportSecurity" maxReceivedMessageSize="5242880">
<security mode="Transport">
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="ActiveDirectoryRoleProvider" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="MembershipADProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Mã
public void SignIn2(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
// put the attributes in a string for userdata
string userData = "";
// create the ticket
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(240),
createPersistentCookie,
userData);
// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// Create a cookie and add the encrypted ticket to the cookie as data.
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
// add the cookie
HttpContext.Current.Response.Cookies.Add(authCookie);
}
Bây giờ sử dụng chủ yếu Giấy phép, tôi nhận được SecurityException
(Tôi biết vai trò có hiệu lực trên máy chủ)
[PrincipalPermission(SecurityAction.Demand, Role = Constants.RoleUser)]
public Message TestRoles()
{
var context = NetworkHelper.GetWebOperationContext();
return context.CreateTextResponse("You have successfully activated the endpoint.");
}
Tôi có thiếu một bước quan trọng ở đây không?
Tôi thấy, tôi thấy rằng thuộc tính 'Authorize' là MVC-centric. Tôi sẽ phải sử dụng 'PrincipalPermission', tôi cho rằng nó hoạt động theo cách rất giống nhau? – Cody
+1: Câu trả lời hay! Rõ ràng Microsoft đã theo chủ đề này với một bài viết về MSDN về việc sử dụng các nhà cung cấp vai trò với WCF: http://msdn.microsoft.com/en-us/library/aa702542.aspx – reSPAWNed
Xin chào.Có thể bạn hãy xem câu hỏi này : https: //stackoverflow.com/questions/45770217/my-customauthorizationpolicy-evaluate-method-never-fires –