我有一个 ASP.NET 应用程序,它使用表单例份验证,并将凭据存储在一个表中 - 非常普通。因为我知道密码是如何散列的,我能以某种方式与 Rails 共享表单例份验证 cookie,从而有效地创建单点登录吗?这两个 Web 应用程序将位于同一个域中。
最佳答案
您可以与 Rails 共享 ASP.NET Forms Auth Cookie,但您必须在 Rails 端对其进行解密。可能是太麻烦了。
一个更简单的解决方案是跳过 .NET Forms Authentication Ticket 并在两侧保留您自己的 auth ticket (cookie),使用您想要的加密算法和两个平台之间的相同 salt。盐可以保存在数据库或物理文件中,如果它们位于同一磁盘上。
一个例子:
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]);
}
}
在您应用程序的其他地方,替换 FormsAuthentication.Encrypt
和 FormsAuthentication.Decrypt
调用:
string MakeTicket(MyTicket t) {
return EncryptSomehow(key, t.ToSerializableFormat());
}
MyTicket ReadTicket(string cookieValue) {
return MyTicket.Parse( DecryptSomehow(key, cookieValue) );
}
Ruby 等价物是:
class MyTicket
def to_serializable_format
"#{@username}|#{@something_else}"
end
def self.parse(value)
values = value.split '|'
MyTicket.new(*values)
end
end
您将在 Rails 代码的某处解密和加密身份验证 cookie。双方使用相同的名称。
利润。
关于c# - Rails 和 ASP.NET 单点登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210653/