【问题标题】:Authentication for local application using website使用网站对本地应用程序进行身份验证
【发布时间】:2020-01-10 12:34:18
【问题描述】:

我正在创建一个 .NET 类库,它允许本地应用程序使用 API 访问在我的网站上注册的用户的帐户。我希望该库处理用户的所有身份验证,以便我创建的任何应用程序都可以简单地调用该库,并返回 API 的令牌。我不确定如何进行此身份验证。

我考虑过几种方法,但它们并不理想。第一种是简单地在库中创建一个登录表单,要求用户输入他们的登录名,然后调用 API。第二种方法是创建一个用户登录的网页,然后获得他们输入应用程序的令牌。

这种情况的理想情况是用户看不到他们的令牌,如果可能的话,实际的登录过程委托给网站。上述两种方式都会在其中一种情况下失败。

我想这样做的理想方式是从我使用的应用程序中获得灵感的,如果用户没有登录,他们必须按下“登录”按钮,这会打开他们登录的网页。一旦他们有这样做成功,应用程序会自动检测到这一点,并且他们已登录到应用程序。这个解决方案的缺点是我不知道自己该怎么做。

基本上我要问的是,第三种解决方案是否可行,我该怎么做,或者如果没有,我忽略了任何更好的解决方案。

仅供参考,网站和 API 分别运行 ASP.NET MVC 和 WebAPI,库将使用 .NET 框架。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    编辑:

    从下面的评论看来,您可能希望使用 OAuth 之类的东西来实现身份验证提供程序。 .NET 参考库可以是 found here 并且 StackOverflow 上已经有一个 similar answer 也可能会有所启发。

    欢迎来到 Stack Overflow!

    就我个人而言,我会将 Web API 保留为验证用户的权威,并且只要您想验证用户的凭据,就只需在所有平台(Web、桌面、移动等)上使用这个 HTTP 端点。

    在高层次上,该过程将大致如下:

    • 让您的“客户端”(桌面、移动、Web 应用程序)在用户首次登录时将 HTTP 请求提交到 API 路由(类似于 /authenticate)。
    • 运行您的身份验证逻辑
    • 如果成功返回一个令牌(并将其缓存以供后续请求使用)
    • 否则返回 401 响应

    现在每个客户端都将获得一个标准化的响应,他们可以使用这些响应来确定他们是否应该将用户重定向到某个受保护的区域,或者向他们显示错误消息。

    这还允许您设计与其运行平台相关的登录屏幕(这是一种更流畅的用户体验)。我不建议让库向用户返回预先构建的登录页面 - 你会发现维护起来真的很痛苦!

    您提出的第三种解决方案也是一种有效的做事方式 - 但它确实具有将用户的注意力从他们正在使用的应用程序上重定向的副作用 - 根据您的用例,您可能不希望这样做。实现起来也比直接调用 API 有点棘手,所以除非你有特殊要求,否则我不推荐这样做。

    希望这有点道理。如果您不确定如何实现跨应用程序身份验证,那么我建议您查看 Stack Overflow 上的一些现有答案,例如:

    【讨论】:

    • 在我所有的“客户”都是由我构建的情况下,这种方法是理想的。但是,我不会是唯一使用 API 的人,但我仍然希望控制登录过程。最好的位置是应用从不接触用户名和密码,只从 API 获取它要求的信息。看起来这个问题是一个不可能的三角需求,所以我可能不得不以某种方式妥协。实际上对用户进行身份验证应该由 API 决定,我同意这一点。
    • 听起来您需要使用OAuth 之类的东西,您可以在其中设置消费者必须注册的身份提供者才能对用户进行身份验证。客户端应用程序永远不会看到凭据 - 如果成功,它会转发用户并取回令牌。如果您在 articles like this 周围搜索一下,可能会比我更好地了解 OAuth 的工作原理(尽管这个以 GitHub 为例)。我已经用更多信息更新了我的答案。
    • 看来你是对的。我可能会采用的路线类似于 OAuth,以及涉及HttpListener 的设置,以获取应用程序的令牌。我需要做更多的研究,但你肯定让我朝着正确的方向前进,所以谢谢。
    • 别担心!如果您仍然很高兴此答案已将您发送到正确的方向,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO 上。如果您对 OAuth 等有任何问题,您可以随时提出新问题。
    猜你喜欢
    • 2019-05-29
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多