WCF 用户名与密码验证封装优化问题

youzi8800 2015-02-28 04:16:14
WCF 用户名与密码验验证时,前端调用需要如下代码
NormalJobClient normalJobClient = new NormalJobClient();

normalJobClient.ClientCredentials.UserName.UserName = "admin";
normalJobClient.ClientCredentials.UserName.Password = "123456";

我的问题是怎么能把ClientCredentials.UserName.UserName和ClientCredentials.UserName.Password封装一下,不用每次调用接口都写这两句话
...全文
364 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
software_artisan 2015-05-23
  • 打赏
  • 举报
回复
引用 7 楼 wjq 的回复:
楼上这么多表示WCF不需要权限控制的,还说什么局域网里无所谓的。 那数据库也不要用户名密码登录校验了,反正在局域网里的。 限制指定权限的用户访问wcf是非常必要的,你的某个方法是hr查看员工工资的,不做权限控制,那么聪明的程序员直接调用wcf相关的方法,绕过客户端或者应用服务器直接访问全公司员工的工资数据了。
只需在方法里面加上数据权限即可!没有数据权限用户的能访问接口,但获取不到任何数据。
  • 打赏
  • 举报
回复
引用 楼主 youzi8800 的回复:
WCF 用户名与密码验验证时,前端调用需要如下代码 NormalJobClient normalJobClient = new NormalJobClient(); normalJobClient.ClientCredentials.UserName.UserName = "admin"; normalJobClient.ClientCredentials.UserName.Password = "123456"; 我的问题是怎么能把ClientCredentials.UserName.UserName和ClientCredentials.UserName.Password封装一下,不用每次调用接口都写这两句话
这个功能仅仅调一次就行了,然后(第一次时)返回一个授权码,以后访问式提供这个授权码即可。 其实这个授权码就相当于SessionID。如果你的WCF服务不需要跨平台通用,那么你也可以直接使用asp.net的SessionID机制。 在后台记住这个授权码(或者说SessionID)对应的授权信息,例如用户编号、购物车、权限等等、最后一次心跳操作时间、允许使用的时间,等等。首先要把信息写到数据库中(因为即使服务进程瞬间重启,服务不能停),然后可以使用数据Cache来加速(使得大部分访问不用访问数据库、而是在内存中直接找到)。
wjq 2015-05-22
  • 打赏
  • 举报
回复
楼上这么多表示WCF不需要权限控制的,还说什么局域网里无所谓的。 那数据库也不要用户名密码登录校验了,反正在局域网里的。 限制指定权限的用户访问wcf是非常必要的,你的某个方法是hr查看员工工资的,不做权限控制,那么聪明的程序员直接调用wcf相关的方法,绕过客户端或者应用服务器直接访问全公司员工的工资数据了。
wjq 2015-05-22
  • 打赏
  • 举报
回复
public static NormalJobClient NewNormalJobClient()
{
NormalJobClient normalJobClient = new NormalJobClient();
normalJobClient.ClientCredentials.UserName.UserName = "admin";
normalJobClient.ClientCredentials.UserName.Password = "123456";
return normalJobClient;
}
本拉灯 2015-03-01
  • 打赏
  • 举报
回复
WCF要么么麻烦的验证么。
moonwrite 2015-03-01
  • 打赏
  • 举报
回复
如果你是在客户端写这个方法~ 那么其实你需要一个工厂~ 如#3楼 public static ClientHelper { public static Client CreateClient() {} }
  • 打赏
  • 举报
回复
或者你把这个抽出去成一个公共方法,然后每次客户端只需要调用下这个方法就行
public static void SetAuth(System.ServiceModel.ClientBase clientBase)
{
 clientBase.ClientCredentials.UserName.UserName = "admin";
                clientBase.ClientCredentials.UserName.Password = "123456";
}
software_artisan 2015-02-28
  • 打赏
  • 举报
回复
你不如在接口里面实现身份验证
  • 打赏
  • 举报
回复
那就不要身份验证呗~~~ 我WCF就是仅在内网使用的,没采用身份验证

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧