Rails和ASP.NET单点登录

Mar*_*man 4 c# ruby asp.net authentication ruby-on-rails

我有一个使用表单身份验证的ASP.NET应用程序,并将凭据存储在表中 - 非常香草.既然我知道如何对密码进行哈希处理,我可以以某种方式与Rails共享表单auth cookie,从而有效地创建单点登录吗?这两个网络应用都将位于同一个域中.

Fáb*_*sta 7

您可以与Rails共享ASP.NET Forms Auth Cookie,但您必须在Rails端解密它.也许这太麻烦了.

一个更简单的解决方案是跳过.NET Forms身份验证故障单,并使用您想要的加密算法和两个平台之间相同的盐来保持双方自己的身份验证票证(cookie).如果盐位于同一磁盘上,则可以将其保存在数据库或物理文件中.

一个例子:

C#方:

public class MyTicket {
  ...
  public string ToSerializableFormat() {
    return String.Format("{0}|{1}", t.Username, t.somethingElseYouNeed);
  }

  public static MyTicket Parse(string value) {
    var vals = value.Split('|');
    return MyTicket(values[0], values[1]);
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的应用程序的其他地方,替换FormsAuthentication.EncryptFormsAuthentication.Decrypt调用:

string MakeTicket(MyTicket t) {
  return EncryptSomehow(key, t.ToSerializableFormat());
}

MyTicket ReadTicket(string cookieValue) {
  return MyTicket.Parse( DecryptSomehow(key, cookieValue) );
}
Run Code Online (Sandbox Code Playgroud)

而Ruby相当于:

class MyTicket
  def to_serializable_format
    "#{@username}|#{@something_else}"
  end

  def self.parse(value)
    values = value.split '|'
    MyTicket.new(*values)
  end
end
Run Code Online (Sandbox Code Playgroud)

在您的Rails代码中的某处,您将解密并加密auth cookie.两侧使用相同的名称.

利润.