none
WINFORM时怎么做登录认证呢? RRS feed

  • 问题

  • 在ASP.NET web.config 时面进行相应配置,WEB FORM 打开时,判断如果没有登录,则会自动转到登录页,但是如果用 winform 做客户端应该怎么实现相应功能呢?

    请知道的网友告诉一下,谢谢!


    相信自己,坚持下去。


    2013年9月17日 4:24

答案

  • Hi,

    看你帖子中所述,你是想使用 Winform 连接服务端的 Web Api 对么? 如果是这样的话,可以参照以下思路:


    1. 在客户端(winform),将 username 与 password 包装在一个 http 请求中发送至服务端。

    2. 服务端使用 MemberShip 进行验证,通过后为该用户创建一条 UserToken 记录,该表维护一个 ExpireTime(过期时间)列,并将该 Token 回传给客户端。

    3. 客户端再请求 服务端(Web Api) 其它 Action 时只需要传递 Token 即可,服务端会检查 ExpireTime,如果过期就不能进行访问。

    另:Token 可以是一个在服务端随机生成的 Guid,服务端与客户端的数据交互可以使用 Json 格式。


    Please mark this as answer if it helps with this issue!

    2013年9月20日 16:49

全部回复

  • 您好,

    winform一開始就先開啟登入的Form,驗証完成後,才會開啟功能呀!

    可參考: How to create winform login dialog and keep looping


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年9月17日 4:41
  • 您好,

    winform一開始就先開啟登入的Form,驗証完成後,才會開啟功能呀!

    可參考: How to create winform login dialog and keep looping


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    我明白是需要先login,再使用系统里面的功能。但是这个login form 应该怎么和服务端通信呢?我想应该不会把服务端写一个 login(string username, string password)  方法吧? 至少 asp.net 里就没有login() 方法

    相信自己,坚持下去。

    2013年9月17日 5:20
  • 我明白是需要先login,再使用系统里面的功能。但是这个login form 应该怎么和服务端通信呢?我想应该不会把服务端写一个 login(string username, string password)  方法吧? 至少 asp.net 里就没有login() 方法

    如果这里你指代的“通信”是数据库的话,应该使用SqlCommand等数据库专用类进行通讯,使用动态的SQL语句根据文本框输入的用户名和密码判断是否存在该用户,然后接着完成你要的事情。

    关于远程数据库连接字符串,您可以:

    1)要不参考:http://www.connectionstrings.com/

    2)要不尝试先使用Vs中(视图=》SQL SERVER服务器资源管理器)创建一个针对某个特定数据库的连接,拷贝属性窗口中的连接字符串到配置文件,或者直接作为SqlCommand的初始化函数的一部分参数中去。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年9月17日 5:27
    版主
  • 我明白是需要先login,再使用系统里面的功能。但是这个login form 应该怎么和服务端通信呢?我想应该不会把服务端写一个 login(string username, string password)  方法吧? 至少 asp.net 里就没有login() 方法

    如果这里你指代的“通信”是数据库的话,应该使用SqlCommand等数据库专用类进行通讯,使用动态的SQL语句根据文本框输入的用户名和密码判断是否存在该用户,然后接着完成你要的事情。

    关于远程数据库连接字符串,您可以:

    1)要不参考:http://www.connectionstrings.com/

    2)要不尝试先使用Vs中(视图=》SQL SERVER服务器资源管理器)创建一个针对某个特定数据库的连接,拷贝属性窗口中的连接字符串到配置文件,或者直接作为SqlCommand的初始化函数的一部分参数中去。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    首先谢谢你的回复,但是你可能误会我的意思了。

    我是说,我的服务端想用 ASP.NET WEB API, 客户端有多种类型: WINFORM,WEBFORM, IOS,WP 等,我需要一种认证方式,来通用这几种客户端。


    相信自己,坚持下去。

    2013年9月17日 6:51
  • 你可以弄一个WebService发布到IIS上,然后不同客户端引用这个WebService判断。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年9月17日 6:55
    版主
  • 你可以弄一个WebService发布到IIS上,然后不同客户端引用这个WebService判断。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    我觉得这样不太合理,WEB  本来就有他的自身验证方式,只是我想知道怎么移到WINFORM 上来而已。

    相信自己,坚持下去。

    2013年9月17日 7:58
  • WinForm和Web验证是完全不同的,因为两者之间框架结构和理念也不同。所以不可同日而语。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年9月17日 8:06
    版主
  • WinForm和Web验证是完全不同的,因为两者之间框架结构和理念也不同。所以不可同日而语。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report


    这是之前的观念,现在移动互联网时代,国内很多家都做到了。比如说QQ和金山快盘, 他有WEB 版本、客户端版本、IOS版本、WP版 等,另外还有 API 开放,他们的认证机制应该是一致的

    相信自己,坚持下去。

    2013年9月17日 8:45
  • 我觉得可以在服务端部署一个专门用于登陆验证的web服务,专门处理登陆验证的请求。现在很多公司的系统也都是这么做的。也有很多是直接验证Active Directory账户的。

    客户端有这么多种平台,能够符合这种要求的我觉得还是web服务比较好,利于各种平台的数据通信。

    WCF对你来说应该是一个不错的选择,请参考:

    http://msdn.microsoft.com/zh-cn/library/aa354513.aspx


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月20日 5:51
    版主
  • Hi,

    看你帖子中所述,你是想使用 Winform 连接服务端的 Web Api 对么? 如果是这样的话,可以参照以下思路:


    1. 在客户端(winform),将 username 与 password 包装在一个 http 请求中发送至服务端。

    2. 服务端使用 MemberShip 进行验证,通过后为该用户创建一条 UserToken 记录,该表维护一个 ExpireTime(过期时间)列,并将该 Token 回传给客户端。

    3. 客户端再请求 服务端(Web Api) 其它 Action 时只需要传递 Token 即可,服务端会检查 ExpireTime,如果过期就不能进行访问。

    另:Token 可以是一个在服务端随机生成的 Guid,服务端与客户端的数据交互可以使用 Json 格式。


    Please mark this as answer if it helps with this issue!

    2013年9月20日 16:49
  • 另:服务端验证 Token 方法应包括以下内容:

    1. 将整个 Token Validation 包裹在 Try... Catch... 中。

    2. 自定义 Token Exception(其中应包含有 Exception Code 字段用于客户端判断服务端对于该 Token 验证结果),在发生异常时将 Exception Code 包装在 Json 中返回给客户端(如:201表示 Token过期,202表示不存在此 Token 等)。

    3. 客户端根据 服务端返回的 Code 进行判断下一步该如何处理(如果没有异常 Code 则正常显示接收到的数据,若 Token 不存在或是过期则弹出 “用户登录” 对话框)。


    Please mark this as answer if it helps with this issue!

    2013年9月22日 10:13
  • WINFORM 首先是登录页面,不会像WEB一样输入地址就可以随意访问子页面,所以这个就没必要考虑了
    2013年9月23日 3:58
  • WINFORM 首先是登录页面,不会像WEB一样输入地址就可以随意访问子页面,所以这个就没必要考虑了
    这样做不行的,这个是多种平台的客户端,所以服务端要写成适合多平台的,你提出的只适合WINFORM

    相信自己,坚持下去。

    2013年9月23日 5:00
  • 另:服务端验证 Token 方法应包括以下内容:

    1. 将整个 Token Validation 包裹在 Try... Catch... 中。

    2. 自定义 Token Exception(其中应包含有 Exception Code 字段用于客户端判断服务端对于该 Token 验证结果),在发生异常时将 Exception Code 包装在 Json 中返回给客户端(如:201表示 Token过期,202表示不存在此 Token 等)。

    3. 客户端根据 服务端返回的 Code 进行判断下一步该如何处理(如果没有异常 Code 则正常显示接收到的数据,若 Token 不存在或是过期则弹出 “用户登录” 对话框)。


    Please mark this as answer if it helps with this issue!

    这个是不是在本太高了?

    相信自己,坚持下去。

    2013年9月23日 5:01
  • 我觉得可以在服务端部署一个专门用于登陆验证的web服务,专门处理登陆验证的请求。现在很多公司的系统也都是这么做的。也有很多是直接验证Active Directory账户的。

    客户端有这么多种平台,能够符合这种要求的我觉得还是web服务比较好,利于各种平台的数据通信。

    WCF对你来说应该是一个不错的选择,请参考:

    http://msdn.microsoft.com/zh-cn/library/aa354513.aspx


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    谢谢,你说的有道理,我只是想找一个更适合现代化技术点的。

    相信自己,坚持下去。

    2013年9月23日 5:03
  • Hi,

    看你帖子中所述,你是想使用 Winform 连接服务端的 Web Api 对么? 如果是这样的话,可以参照以下思路:


    1. 在客户端(winform),将 username 与 password 包装在一个 http 请求中发送至服务端。

    2. 服务端使用 MemberShip 进行验证,通过后为该用户创建一条 UserToken 记录,该表维护一个 ExpireTime(过期时间)列,并将该 Token 回传给客户端。

    3. 客户端再请求 服务端(Web Api) 其它 Action 时只需要传递 Token 即可,服务端会检查 ExpireTime,如果过期就不能进行访问。

    另:Token 可以是一个在服务端随机生成的 Guid,服务端与客户端的数据交互可以使用 Json 格式。


    Please mark this as answer if it helps with this issue!

    有道理,我觉得这个应该有个框架的,因为现在移动互联网很主流,国内的很多网站都推出多平台的原生客户端,不知道他们怎么实现的

    相信自己,坚持下去。

    2013年9月23日 5:04