从另一个ASP.NET应用程序

问题描述:

使用DNN的认证和授权信息,我有一个ASP.NET Web应用程序“K”,有它自己的认证和授权建立在SimpleMembershipProvider。从另一个ASP.NET应用程序

现在我想建立有应用“K”和DNN,在某种程度上,用户将登录到DNN应用一个网站,我有DNN应用程序中一个按钮,将跳转到应用程序“K” 。

在“K”,我想实现这些行为。

  1. 如果用户未登录,请返回DNN的主页。
  2. 如果用户已登录但DNN中没有“K用户”角色,请显示“联系管理员”消息。
  3. 如果用户已登录并在DNN中具有“K用户”角色,请允许用户照常使用该应用程序。

这是全新的网站,所以我没有任何约束。我可以把“K”放在DNN下(反之亦然,但不知道为什么我会那样做),我可以在DNN旁边放上“K”并给出同一个machineKey来共享cookie,我甚至不需要使用DNN,它可以是任何CMS,只要它有很好和简单的方式来填写信息。

我必须用我的google搜索错误的关键字会。这似乎是非常基本的需求,但找不到确切的文章,可以告诉我如何去做。

任何帮助将不胜感激。

这是我如何解决它。

  • 将DNN和“K”作为web根目录的直接子兄弟姐妹。
  • 使DNN和“K”具有相同的MachineKey。
  • User Migration sql script,从DNN到“K”。
  • 建立从DNN到“K”的链接。
  • 修改如下所示的“K”web.config验证部分。关键点是loginUrl和名称。

>

<authentication mode="Forms"> 
    <forms loginUrl="/dnn/Login.aspx" defaultUrl="~/" name=".DOTNETNUKE" protection="All" timeout="60" cookieless="UseCookies" /> 
</authentication> 
  • 禁用 “K” 的任何代码,其允许用户直接登录到 “K”。
  • 当用户第一次访问“K”时,执行用户迁移sql脚本。 (你可以在适合你的最随时启动迁移脚本。)

现在,用户将登录到DNN,并点击链接访问“K”。发生这种情况时,“K”可以表现得好像用户使用“K”应用程序实际登录一样,就像从Web.Security等中读取角色一样。由于您在两个应用程序之间进行了表单身份验证Cookie名称和MachineKey同步。

+0

我期待着做类似的事情,在你的解决方案中,我不清楚DNN和“K”是否必须使用相同的数据库,即相同的aspnet_user等表。 – Apeksha

+0

@Apeksha你不必使用同一个数据库,事实上单独的数据库是更好的选择。您必须像我提到的那样使用用户迁移脚本来同步用户,但这种方式与DNN松散耦合。我最终没有使用DNN,只是实现了我自己的安全管理和支付处理,因为与手写代码相比,DNN非常慢,支付处理模块不能满足我的需求。 – kennethc

听起来好像您需要修改“K”应用程序的身份验证方法。然后,您可以构建一个模块,根据用户是否已登录并处于特定角色来处理这些行为。

一旦你登录到DNN和检查的作用,你的用户需要被认证为“K”的网站。

我们做同样的事情,但它需要我们的“内部”的网站将接受令牌作为谁的用户是他们被认证证明。

这是我们所做的一个例子:/

  • 这两个站点都必须检查的cookie令牌
    • 如果令牌存在,刷新。如果没有,对饼干创建的Cookie /令牌
  • “内部”现场检查,并使用值来验证令牌数据库
  • 后续请求从cookie中读取单词和验证对令牌数据库
  • 当用户登录出来,饼干和数据库条目被删除
  • 如果用户不退出正确,你必须清理令牌上设置的时间间隔
+0

我可以使用任何现有的CMS,但如果我不必自定义CMS部件,它会更好。 DNN被广泛使用,所以我想知道是否有一种方法可以使用现有的DNN软件包。然后再使用任何现有的CMS软件包。 – kennethc

+0

如果安全性不是一个大问题,您可以打开UsersOnline功能[或阅读dnn SiteLog表]让“K”应用程序确定用户是否在线,并以这种方式进行身份验证。然后,您可以让它读取用户,userroles和角色表以确定用户是否是某个组的成员。然后,让它处理你提到的行为。 根据您的设置和要求,您可以通过很多不同的方式来处理此问题。 DNN不提供所有内容,但在特殊情况下非常灵活。我做了很多跨站点集成。 –