我想在web api中创建一个演示登录服务,需要在响应上设置一个cookie.我怎么做?或者有更好的授权方式吗?
我有一个托管对象调用COM服务器来分配一些内存.在托管对象消失之前,托管对象必须再次调用COM服务器以释放该内存,以避免内存泄漏.此对象实现IDisposable以帮助确保正确释放内存的COM调用.
如果没有调用该Dispose方法,我希望对象的终结器释放内存.问题是,最终确定的规则是你不能访问任何引用,因为你不知道在你之前已经GC和/或最终确定了哪些其他对象.这使得唯一可触摸的对象状态为字段(句柄是最常见的).
但是调用COM服务器涉及通过运行时可调用包装器(RCW)来释放我有一个存储在字段中的cookie的内存. 从终结器调用RCW是否安全(是否保证此时没有GC或最终确定)?
对于那些不熟悉终结的人来说,虽然终结器线程在托管应用程序域运行的同时在托管应用程序域的后台运行,但是对于那些触摸引用的情况理论上可以正常,最终化也会在appdomain shutdown和任何顺序中发生 - 不是只是在参考关系顺序.这限制了您可以认为从终结器触摸的安全性.即使引用为非null,对托管对象的任何引用都可能是"坏"(收集的内存).
更新:我刚试了一下,得到了这个:
myassembly.dll中发生未处理的"System.Runtime.InteropServices.InvalidComObjectException"类型异常
附加信息:无法使用已与其基础RCW分离的COM对象.
当.NET System.Uri类解析字符串时,它会对输入执行一些规范化操作,例如对方案和主机名进行下限.它还会修剪每个路径段的尾随时段.后一个特性对于OpenID应用程序是致命的,因为一些OpenID(如从Yahoo发布的那些)包括base64编码的路径段,其可以以句点结束.
如何禁用Uri类的周期修剪行为?
使用UriParser.Register初始化的解析器注册我自己的方案GenericUriParserOptions.DontCompressPath可以避免周期修剪,以及其他一些对OpenID也不可取的操作.但我无法为HTTP和HTTPS等现有方案注册新的解析器,我必须为OpenID做这些.
我尝试的另一种方法是注册我自己的新方案,并编程自定义解析器以将方案更改回标准HTTP方案作为解析的一部分:
public class MyUriParser : GenericUriParser
{
private string actualScheme;
public MyUriParser(string actualScheme)
: base(GenericUriParserOptions.DontCompressPath)
{
this.actualScheme = actualScheme.ToLowerInvariant();
}
protected override string GetComponents(Uri uri, UriComponents components, UriFormat format)
{
string result = base.GetComponents(uri, components, format);
// Substitute our actual desired scheme in the string if it's in there.
if ((components & UriComponents.Scheme) != 0)
{
string registeredScheme = base.GetComponents(uri, UriComponents.Scheme, format);
result = this.actualScheme + result.Substring(registeredScheme.Length);
}
return result;
} …Run Code Online (Sandbox Code Playgroud) 目前我正在开发一些基础架构,并且我已经实现了自己的RESTful身份验证机制.
现在我想到,也许我不应该这样使用行业标准,因此与我的项目的互操作性在认证和授权方面可能是微不足道的,也更容易理解.
在查看了一些谷歌搜索的文章并在Stackoverflow中阅读了一些问答后,我找不到如何成为OpenID提供商 - 我不是在谈论使用谷歌,Windows Live,Facebook Connect等认证用户,我想开发一个支持OpenID的系统,如果有人想注册我的服务,他们将在我自己的域中进行 - .
实际上我的问题是:任何人都可以成为OpenID提供商,并且DotNetOpenAuth是一个库,可以在您自己的基础架构中开发此协议吗?
谢谢.
既然idselector已经升级到RPXNow并且你不能"只使用"选择器代码,那么什么是好的替代品呢?
我想在我正在使用的新网站上实现OpenId,但是用户在登录时会非常愚蠢,除非我为他们提供了一种简单的方法.
作为参考,我将使用.Net Open Id作为ASP.Net MVC Web应用程序的后台.
编辑
我想在.NET中创建一个新的X.509证书,它符合我设置的哈希算法和密钥长度要求.这将是一个自签名证书.创建新证书可能会创建一个新密钥,或者我想要以byte []形式导入我现有的私钥.
有谁知道怎么做?
我知道stackoverflow使用OpenID身份验证.我也想尝试使用它.我正在使用带有C#的asp.net mvc 2.0.
我找到了这个
http://www.dotnetopenauth.net/
我想知道这是否是用于stackoverflow的.
任何教程也都很好.
编辑
我正在尝试加载一些示例项目,但是当我在VS2010中构建它时,我得到了
Error 6 'System.Diagnostics.Contracts.ContractInvariantMethodAttribute' is inaccessible due to its protection level C:\Users\chobo2\Downloads\DotNetOpenAuth-3.4.6.10357\DotNetOpenAuth-3.4.6.10357\Samples\OpenIdOfflineProvider\TextBoxTextWriter.cs 73 4 OpenIdOfflineProvider
Error 7 The type or namespace name 'ContractInvariantMethod' could not be found (are you missing a using directive or an assembly reference?) C:\Users\chobo2\Downloads\DotNetOpenAuth-3.4.6.10357\DotNetOpenAuth-3.4.6.10357\Samples\OpenIdOfflineProvider\TextBoxTextWriter.cs 73 4 OpenIdOfflineProvider
Run Code Online (Sandbox Code Playgroud) 我有一个ASP.Net 2.0网站,目前正在使用自定义MembershipProvider和标准登录控件.我想用DotNetOpenId替换登录控件.
我重写了验证用户名和密码的ValidateUser,但是在使用OpenId时我不需要实现它.
是否可以使用OpenId并且仍然可以使用成员资格提供程序,以便我仍然可以使用它来访问当前登录的用户?
或者是否需要使用提供者模型?
asp.net openid asp.net-membership membership-provider dotnetopenauth
我似乎无法执行使用DbCommand对象创建数据库的SQL.我究竟做错了什么?这是我的代码:
DbConnection connection; // initialized and opened elsewhere
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
这是错误:
查询语法无效.,在术语'/',第1行,第2列附近.说明:在执行当前Web请求期间发生了未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Data.EntitySqlException:查询语法无效.,在术语'/',第1行,第2列附近.
这是文件的第一部分.仅针对第一行的注释抛出异常:
/****** Object: Table [dbo].[User] Script Date: 10/08/2009 12:14:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[EmailAddress] [nvarchar](100) NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] …Run Code Online (Sandbox Code Playgroud) 我有一个小的ASP.NET Web应用程序托管在集成测试中(在NUnit中执行).我的产品代码通常可以从web.config或app.config文件中找到配置数据,但出于某种原因,在托管ASP.NET时,我似乎ArgumentException在执行第一个命令时得到了:
var configuration = ConfigurationManager.OpenExeConfiguration(null);
return configuration.GetSectionGroup(SectionGroupName);
Run Code Online (Sandbox Code Playgroud)
不在独立的exe内部运行时必须指定exePath.
我不知道该把什么放在这里.我的产品没有一个合理的exePath作为参数传递给这个方法,因为它通常在Web服务器中运行.此外,通常可以使用以下方式打开普通Sections(而不是SectionGroups):
ConfigurationManager.GetSection(SectionName)
Run Code Online (Sandbox Code Playgroud)
即使在单元测试中,这也适用于App.config文件以某种方式神奇地被读取.这是我在阅读SectionGroups时想要的.
有任何想法吗?