我试图找出如何使用EF代码First 4.1 RC获得复合键.
目前,我正在使用[Key] Data Annotation,但我无法指定多个键.
如何指定复合键?
这是我的例子:
public class ActivityType
{
[Key]
public int ActivityID { get; set; }
[Required(ErrorMessage = "A ActivityName is required")]
[StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
public string ActivityName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要"ActivityName"也是一个关键.当然,我可以围绕这个编码,但那不是很好的数据库设计.
我试图复制在MSDN上找到的示例.我正在使用ASP.NET和EF 4.1(CTP?).我已经使用NuGet来安装EntityFramework包.
我收到此错误:The provider did not return a ProviderManifestToken string...并且永远不会创建数据库.
这是我的连接字符串:
<add name="HospitalContext"
connectionString=
"data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);
var labResult = new LabResult { Result = "bad", Patient = pat };
int recordAffected = db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这是我的背景:
public class HospitalContext : DbContext
{
static HospitalContext()
{
Database.SetInitializer(new HostpitalContextInitializer());
}
public DbSet<Patient> Patients { get; set; }
public DbSet<LabResult> LabResults { get; set; }
}
public class …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用纯.NET(没有外部类,控件,帮助程序)来创建SAML消息.我在互联网上找到了一些代码; 这就是我所拥有的:
private static SamlAssertion createSamlAssertion()
{
// Here we create some SAML assertion with ID and Issuer name.
SamlAssertion assertion = new SamlAssertion();
assertion.AssertionId = "AssertionID";
assertion.Issuer = "ISSUER";
// Create some SAML subject.
SamlSubject samlSubject = new SamlSubject();
samlSubject.Name = "My Subject";
//
// Create one SAML attribute with few values.
SamlAttribute attr = new SamlAttribute();
attr.Namespace = "http://daenet.eu/saml";
attr.AttributeValues.Add("Some Value 1");
//attr.AttributeValues.Add("Some Value 2");
attr.Name = "My ATTR Value";
//
// Now create the SAML statement containing …Run Code Online (Sandbox Code Playgroud) 我试图让我的Web API项目使用Swagger'漂亮'文档等(http://swagger.io/)
我正在使用Swashbuckle for .NET,从NuGet安装,我使用的版本是4.0.1
我已经能够安装和使用Swagger了.此时一切似乎都很正常.我唯一的障碍是禁用API密钥并能够使用OAuth,就像在PetStore示例中一样(http://petstore.swagger.wordnik.com/#!/pet/addPet)
我已经尝试了我能在网上找到的所有东西.我在下面列出它们:
首先,这是我的Startup.cs
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
Swashbuckle.Bootstrapper.Init(config);
}
Run Code Online (Sandbox Code Playgroud)
现在,我的SwaggerConfig.cs:
public static void Register()
{
Swashbuckle.Bootstrapper.Init(GlobalConfiguration.Configuration);
SwaggerSpecConfig.Customize(c =>
{
c.IgnoreObsoleteActions();
c.IncludeXmlComments(GetXmlCommentsPath());
c.ApiInfo(new Info
{
Title = "Work you",
Description = "testing some stuffs",
Contact = "Email@email.com"
});
c.Authorization("oauth2", new Authorization
{
Type = "oauth2",
Scopes = new List<Scope>
{
new Scope { ScopeId = "products.read", Description = "View products" },
new Scope { ScopeId …Run Code Online (Sandbox Code Playgroud) 请参阅下面的代码以解决此问题
我正在尝试找到处理ASP.NET Core 2.1中已过期的刷新令牌的最佳和最有效的方法.
让我解释一下.
我正在使用OAUTH2和OIDC来请求授权代码授权流程(或使用OIDC的混合流程).此流/授权类型使我可以访问AccessToken和RefreshToken(授权代码,但这不适用于此问题).
访问令牌和刷新令牌由ASP.NET核心存储,并且可以分别使用HttpContext.GetTokenAsync("access_token");和检索HttpContext.GetTokenAsync("refresh_token");.
我可以刷新access_token没有任何问题.当问题refresh_token以某种方式过期,撤销或无效时,问题就会发挥作用.
正确的流程是让用户再次登录并再次返回整个身份验证流程.然后应用程序获得一组新的令牌返回.
我的问题是如何以最好和最正确的方法实现这一目标.我决定编写一个自定义中间件,access_token如果它已经过期,它会尝试续订.然后,中间件将新令牌设置AuthenticationProperties为HttpContext,以便以后管道中的任何调用都可以使用它.
如果由于任何原因刷新令牌失败,我需要再次调用ChallengeAsync.我从中间件调用ChallengeAsync.
这是我遇到一些有趣的行为的地方.然而,大部分时间这都有效,有时候我会得到500个错误而没有关于什么是失败的有用信息.几乎看起来中间件试图从中间件调用ChallengeAsync有问题,也许另一个中间件也试图访问上下文.
我不太清楚发生了什么事.我不太确定这是否是适合这种逻辑的地方.也许我不应该在中间件中使用它,也许在其他地方.也许Polly for HttpClient是最好的地方.
我愿意接受任何想法.
感谢您的任何帮助,您可以提供.
代码解决方案对我有用
感谢MickaëlDerriey的帮助和指导(请务必在此解决方案中查看他的答案以获取更多信息)这是我提出的解决方案,它为我工作:
options.Events = new CookieAuthenticationEvents
{
OnValidatePrincipal = context =>
{
//check to see if user is authenticated first
if (context.Principal.Identity.IsAuthenticated)
{
//get the users tokens
var tokens = context.Properties.GetTokens();
var refreshToken = tokens.FirstOrDefault(t => t.Name == "refresh_token");
var accessToken = tokens.FirstOrDefault(t => t.Name == "access_token");
var exp …Run Code Online (Sandbox Code Playgroud) oauth openid-connect asp.net-core refresh-token asp.net-core-2.1
我试图获取存储过程的返回值.以下是此类存储过程的示例:
select
Name,
IsEnabled
from
dbo.something
where
ID = @ID
if @@rowcount = 0
return 1
return
Run Code Online (Sandbox Code Playgroud)
这是一个简单的选择.如果找到0行,我的结果集将为null,但我仍然会有一个返回值.
这是一个糟糕的例子,因为这是一个选择,所以我确定我能找到返回0行.但是,在插入,删除或其他调用中,我们需要此返回值来了解是否存在问题.我一直无法找到获得此返回值的方法.我可以得到输出值,我可以得到结果集,但没有返回值.
如果我手动调用SQL,或者即使我SqlCommand使用实体框架运行,我也可以获得返回值,但这不是我想要做的.
有没有人能够使用Entity Framework从存储过程中获取返回值?
谢谢您的帮助!
我正在努力学习Web API和API的方法.
这时,我正在调查身份验证.
我知道API身份验证和授权有多种方法.最常见的似乎是不记名令牌.
我也看到SAML,我也知道x509(从我的WCF时代开始).
我今天想谈谈不记名令牌.承载令牌作为标头传递.标题未加密可能没有加密?因此,有人可能会抓住所述标记并在未经同意的情况下冒充用户.这是我对持有人令牌的看法.今天许多流行的服务似乎都使用这种API验证方法.
除了持票人令牌之外还有哪些其他选择但是或多或少与HMAC消息一样安全等等?
我似乎对许多身份验证方法有所了解.我试图了解更多,并希望构建一个非常安全的API,允许SSO(单点登录) - 如果承载令牌是要走的路,那么很好,它是非常容易和开箱即用的解决方案.如果有更好,更安全的东西,即使工作和时间远远超过持票人,我仍然愿意接受.
我不知道为什么我不喜欢不记名令牌的声音,但它似乎很容易攻击和利用.特别是对于支付相关类型的服务.
谢谢!
我试图找出如何将clientID(或我可能需要的任何其他数据)放在承载/访问令牌中.
我正在使用OWIN OAuth来创建令牌.我可以向身份凭证添加声明,然后将其标记/序列化到令牌中并传递回客户端.
然后,客户端调用受保护的API,并且API对令牌进行反序列化,并为用户设置IPrinciple.此标识对象包含用户名和ClaimsIdentity中的范围.
我想获得其他信息,例如首先发出获取令牌请求的clientID.
我可以把这些数据放在索赔中; 这显然有效,但它是一个黑客.
我已经做了很多搜索,我不确定如果可能的话,如何在承载/访问令牌中存储额外的数据.
提前致谢!
在过去的几年里,我一直在用 OAUTH 2 做一些工作。我有几个授权服务器和几个使用它们的客户端。
任何使用 OAUTH2 制作应用程序或某些客户端解决方案的人都知道客户端密码可能是一个问题。可以通过使用访问代码授权在一定程度上缓解这种情况。已经讨论过使用代理来获取秘密。
我的问题是关于重定向 URI - 这是为了保护访问代码授予过程。身份验证服务器只会将访问代码返回到文件中的重定向(在该客户端 ID 的数据库中)。这个问题与移动应用程序有关。它们通常依赖于https://127.0.0.1或https://localhost的重定向 URI。任何人都可以获得 localhost 令牌,对吗?
在这种情况下,是什么阻止某人使用 localhost 重定向 URI 来模拟 clientID?我能不能制作一个模仿应用程序,使用真实的客户端 ID 使用相同的 OAUTH2 登录流程,如果我能够让用户登录,我现在有一个 OAUTH 令牌来访问资源服务器。我错了吗?
如果有人能对此有所了解,我将不胜感激。我想尽可能多地学习,任何事情都有帮助。