我正在使用WebAPI构建一个API,它将通过Web从Web浏览器客户端通过HTTPS接受身份验证信息. Web浏览器使用表单身份验证并需要HTTPS,因此可以安全地将用户名/密码发送到API端点.我的API使用Websecurity.Login()和Websecurity.logout()来处理Web客户端的身份验证.

如何在使用Winjs构建的WP8应用程序/通用应用程序中处理这个问题?我可以做同样的事情 – 通过HTTPS发送登录/注册凭据并使用Websecurity来处理表单身份验证吗?

以下是我的WebAPI目前如何设置为auth:

public HttpResponseMessage LogIn(LoginModel model)
{
    if (ModelState.IsValid)
    {
        if (User.Identity.IsAuthenticated)
        {
            return Request.CreateResponse(HttpStatusCode.Conflict,"already logged in.");
        }

        if (WebSecurity.Login(model.UserName,model.Password,persistCookie: model.RememberMe))
        {
            FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
            return Request.CreateResponse(HttpStatusCode.OK,"logged in successfully");
        }
        else
        {
            return new HttpResponseMessage(HttpStatusCode.Unauthorized);
        }
    }

    // If we got this far,something Failed
    return new HttpResponseMessage(HttpStatusCode.InternalServerError);
}

public HttpResponseMessage logout()
{
    if (User.Identity.IsAuthenticated)
    {
        WebSecurity.logout();
        return Request.CreateResponse(HttpStatusCode.OK,"logged out successfully.");
    }

    return Request.CreateResponse(HttpStatusCode.Conflict,"already done.");
}

此方法是否与WP8或其他本机移动应用程序开发身份验证兼容?

解决方法

假设连续请求带有附加到Login操作的第一个请求的cookie,它肯定会有效.

对于使用ajax的浏览器应用程序,这是开箱即用的,因为连续的ajax请求携带由同一域发出并附加在当前浏览器会话中的所有cookie.

在本机应用程序的情况下,这可能是tricker,因为这意味着必须使用相同的客户端代理实例,或者您找到了一种方法来为身份验证cookie提供临时本地存储,并将这些cookie附加到每个请求.

但是,此请求存在潜在的缺点:您假设登录方法可以在活动方案中使用登录名/密码来生成表单cookie.这并不总是那么简单.

这是因为您的站点可能与外部身份提供商(ADFS,Azure Active Directory,Google,Facebook等)联合,以便实际身份验证在另一个网站中进行,并且您的网站仅获得符合单一标志的响应使用的协议(OAuth2,WS-Federation).

在这种情况下,实际上没有简单的方法在服务器端使用对登录/密码来获取用户的身份.

在这种情况下,身份提供者未知的解决方法是托管Web浏览器控件(如果可能)并让它执行被动身份验证方案 – 这意味着您导航到应用程序页面并让Web浏览器自动控制302登录页面,无论需要多少次重定向.然后,用户在提供者页面提供凭据,Web浏览器一直重定向回您的应用程序,这是您在服务器端捕获身份,关闭Web浏览器控件并以某种方式(取决于实际的Web浏览器主机)的位置阅读身份验证cookie,以便您可以将其附加到进一步的请求.

听起来很棘手,但我们发现了一些联邦方案,其中各方之间的实际SSO协议无法得到保证,并且托管Web浏览器内的被动方案的这种模拟是唯一可靠的方式.

c# – Windows phone 8开发和WebAPI – 通过表单身份验证进行身份验证?的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. wordpress添加Html5的表单验证required方法小结

    这篇文章主要介绍了wordpress添加Html5的表单验证required方法小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  6. ios – 如何在Swift中手动为UIWebView设置Cookie

    我需要在swift中为webview设置一个cookie.我找到了一个解决方案,但它是针对objective-c的.如何在Swift中做到这一点?

  7. 通过在iOS中处理cookie来维护会话信息

    我是iOS开发的新手.我正在使用NSURLSession来管理会话信息.下面是我用来调用任何服务器API的示例代码,我的申请流程是,如果没有登录–>登录(呼叫登录api)Else转到主屏幕并调用其他API.我的问题是,一旦从内存中删除应用程序,会话信息就不会被维护,我不得不再次调用Login.我的要求就像Facebook一样,用户只需登录一次,并且在下次应用程序启动时保持会话.编辑:我想我必须通过

  8. ios – 以http无效的自定义URL方案开头

    我在应用程序中使用了自定义URL方案.我成功地从safari重定向到我的应用程序.就像我已经制作了URL方案“appname”.请检查http://prntscr.com/2cjx0p.我需要使用像iosurlredirectfrommailtoapp这样的解决方案,但我不确定如何设置cookie.我发现我必须首先在我的应用程序中为服务器“http://myappname.com”设置一个cook

  9. 在iOS 8.4上清除WKWebView的Cookie

    另一个想法是使用自定义的WKProcesspool子类手动管理cookie.我相信这是Firefox如何管理任何cookie问题.

  10. ios – 在302重定向之后,AVPlayer无法为同一个域发送cookie

    有没有办法解决这个问题?请分享你的想法.解决方法制作一个演示该问题的示例,提交错误报告.然后创建一个提到雷达的DTS事件,并且您正在寻找一个解决方案,以便您认为是一个错误.这打开了两种可能性:>工程师可以确认错误–如果不知道他们会修复它,如果它是重复的,您可以请求原始状态信息>DTS具有足够的知识,有能力查询实际的AV工程师如何解决这个问题这样你就可以花更少的时间找到可能不会得到任何其他答案的地方.

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部