我正在编写一个工具,它将检查整个网络中工作站的运行状况,并根据发现的问题进行修复.我想创建一个日志文件,因为应用程序正在运行每台计算机上的任务/检查.我现在只想让它在一台机器上运行,但是它会一次扫描100多台机器(螺纹外出).
创建日志文件的最佳方法是什么?
我正在考虑使用a List<string>在内存中构建日志文件,然后在完成后将其输出到文件中.
我只是觉得可能有更好的方法吗?
脚本
我有一个ASP.NET Web API,它使用OAuth密码流来提供承载令牌以获取对其资源的访问权限.
我现在正在制作一个需要使用此API的MVC应用程序.
计划是让MVC控制器代表客户端浏览器调用API.
来自浏览器的ajax请求将命中MVC控制器,然后进行API调用.然后将结果作为JSON反馈给客户端并在java脚本中处理.
客户端永远不应直接与API通信.
获得认证.
通过成功调用web api令牌端点,我需要找到在MVC应用程序中收到承载令牌后处理承载令牌的最佳方法.
我需要在随后的api调用中使用这个bearer token.
我的计划是把它存放在 System.Web.HttpContext.Current.Session["BearerToken"]
然后我可以创建一个自定义AuthorizationAttribute来检查当前HttpContext中是否存在BearerToken,如果它不存在,客户端将需要重新访问令牌端点.
这看起来可行吗?
我要求各方就此提出意见,因为我不相信这是我项目的最佳解决方案.
情景
我最近构建了一个 API,并使用不OAuth记名访问令牌保护了它的资源。
我已经使用了Client_CredentialsFlow,因为它将由客户端而不是用户访问。
事情是这样的,当客户成功提供了client_id并且client_secret他们收到如下响应时: -
{
"access_token": "<Access Token>",
"token_type": "bearer",
"expires_in": 1199,
"refresh_token": "<Refresh Token>"
}
Run Code Online (Sandbox Code Playgroud)
刷新令牌。
不太了解刷新令牌,我立即认为客户端将能够提供 OAuth 服务器refresh_token来检索新的Access_Token.
这是“有点”正确的。
为了使用该refresh_token客户端仍然需要通过client_id并client_secret随着refresh_token获得新的访问令牌。
该grant_type也需要改变refresh_token。
使用此流程的 refresh_token 的好处在哪里?如果我每次都需要传递 client_id 和 client_secret,您肯定会完全避免使用刷新令牌吗?
过去几天我和Vuex一起看VueJs 2,我非常喜欢它.
我只简单介绍了React,我发现vue js 2更容易上手.
React似乎越来越受欢迎,但我看不出React优于Vue 2的好处.
两者都是基于组件的框架,具有路由和状态管理工具.
那么有人可以解释这些框架之间的主要区别是什么?
我有一个Timespan,我需要以特定的格式输出,如下所示: -
TimeSpan TimeDifference = DateTime.Now - RandomDate;
Run Code Online (Sandbox Code Playgroud)
我像这样格式化TimeSpan: -
string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
Run Code Online (Sandbox Code Playgroud)
结果将如下所示: -
"00:16:45.6184635"
如何将这些秒数舍入到0位小数?
Expected Result = 00:16:46
Run Code Online (Sandbox Code Playgroud)
谢谢
作为C#的初学者,我对线程非常陌生.我有一个程序将触发Windows应用程序内的多个线程.我的目标是为列表中的每个项目启动一个新线程.此列表中的项目是网络上的工作站名称.创建的每个线程都会在每台机器上进行修复,当线程完成后,它会写入任何发现的错误的日志文件等.但我想要确定的是所有线程何时完成.所以,如果我有100台机器,100个线程,我如何确定何时关闭?
以下是我的方法: -
private void repairClientsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (machineList.Count() != 0)
{
foreach (string ws in machineList)
{
new Thread(new ParameterizedThreadStart(fixClient), stack).Start(ws);
}
}
else
{
MessageBox.Show("Please import data before attempting this procedure");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在我的ASP.NET解决方案中构建一个页面,该页面从第三方API服务中检索大部分数据.
页面本身需要对API进行大约5次单独的不同调用以填充其所有控件,因为每个API请求都会返回不同的数据集.
我想处理我在新线程上进行的每个单独的Web请求,同时减少加载时间.
我正在制作的每个请求都是这样的: -
WebRequest request = WebRequest.Create(requestUrl);
string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
return new JsonSerializer().Deserialize<OccupationSearch>(new JsonTextReader(new StringReader(response)));
Run Code Online (Sandbox Code Playgroud)
首先,我应该尝试这个吗?即,安全吗?并且它会通过多线程来提高性能.
其次,这样做的最佳方法是什么?多线程系统有许多不同的方法,但最适合这项任务的方法是什么?
我一直在研究如何将命令提示符窗口嵌入到WinForm中.
我有许多使用pinvoke的例子,但是我希望能够将命令提示符窗口锁定在end_user无法移动的表单内的严格位置.
这可能吗?
这样做的原因是我们在大型网络上使用远程工具,您可以在会话中同时打开许多这些工具.我想尽可能将它们全部放入一个空间.
谢谢
我正试图在我的Asp.Net Web API中实现招摇,我遇到了一个问题.
我正在使用密码资源所有者流,我不得不添加一个解决方案来执行此操作,这包含在以下堆栈溢出问题中: -
Swagger/Swashbuckle:具有资源所有者密码凭证授权的OAuth2
我已经完成了所有工作,通过javascript将Bearer令牌添加到当前浏览器窗口中的请求标头,但是api调用需要授权的控制器方法仍然返回"401 - 授权失败".
以下是获取持票人令牌并添加标题的JavaScript: -
$('#input_apiKey').change(function () {
var key = $('#input_apiKey')[0].value;
var credentials = key.split(':'); //username:password expected
$.ajax({
url: "http://localhost:42291/token",
type: "post",
contenttype: 'x-www-form-urlencoded',
data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1],
success: function (response) {
var bearerToken = 'Bearer ' + response.access_token;
window.swaggerUi.api.clientAuthorizations.add('Authorization', new window.SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header'));
window.swaggerUi.api.clientAuthorizations.remove('api_key');
alert("Login Succesfull!");
},
error: function (xhr, ajaxoptions, thrownerror) {
alert("Login failed!");
}
});
});
Run Code Online (Sandbox Code Playgroud)
Swagger响应中的卷曲是: -
卷曲-X GET --header "接受:应用/ JSON" --header "授权:承载NqlSG-WyTx2zkYE8xFklGyZWlQDZdsCKZBHruEXvX47N7PAzw4-jZ4eH5D0yFzQTXj13RwKFFt1rUZt2fzWj1vR5UR87wdlKC3YvsTojYV4-3DsWwY7qYRfiKPuM0j09c3X5lnrtlBVJ1rBRUH0TLjfw_yGxgoLBwOJl9xyC1YWNoPOe2nzL4lMOHodAnMem0IBMJmUo3Rt575tnWAbBsQXWhlImDIxCZXvkZdJtlXfIfBSUdY9gfRWL0ZjKbf7m2-yLzH0gpMAMuKaADmJlIudJc0d4SP1Nn2Kh2HuVH8CX4QgZuu4egl9N6rY2smorP2vBSC4_dC4CpmYYzOTu2wUnUhHDY2Q6NWl377ijDKwZLcW9jtD-2tBiEGmFuRV0mVGnh0zc4w9Ao9jPCdtrbSyGitgloBW-UG2bfyao3eE" " …
背景说明
谈到Identity Server 4,当我考虑客户端应用程序中的用户管理设计时,我遇到了障碍.
此时,我使用ASP身份用户帐户作为其用户存储设置Identity Server.
我已经构建了用于将用户添加到Identity Server用户存储的UI.
我已经测试过设置一个MVC应用程序的客户端,我正处于可以成功通过Identity Server进行身份验证并在我的客户端应用程序中接收openid身份令牌的位置.
Identity Server为我的客户端应用程序提供身份验证.
现在,我需要专注于我的应用程序内的授权.这就是我遇到困难的地方,我需要在应用程序本地创建用户,其中存储了应用程序中的用户权限.
我需要将Identity Server中的用户链接/关联到客户端应用程序中的用户.
一种方法是将sub存储在身份令牌中作为客户端应用程序数据库中的用户声明(Asp Identity).这样,当用户进行身份验证时,我可以根据令牌中的sub在本地数据库中找到它们.
sub必须是身份服务器用户存储中用户的唯一ID.这样,如果用户的电子邮件被更改,我们仍然可以链接这两个用户帐户.
客户端应用程序中的用户帐户不需要密码或电子邮件地址,它将纯粹是用于整个应用程序授权的声明和角色,以及任何其他特定于应用程序的信息.
题
在客户端应用程序中创建用户时,必须存在Identity Server和客户端应用程序之间的通信?
在这个过程中,这些任务应该完成吗?我正在寻找两个应用程序之间的通信流程的一些指导?
编辑
客户端应用程序中根本没有用户帐户是否可行?
这意味着用户的所有用户声明都存储在Identity Server的用户存储中.
当客户端使用IDP进行身份验证时,它仅请求特定于客户端应用程序的用户声明.
用户存储中的示例用户声明: -
当客户端应用程序A进行身份验证时,它仅请求范围clientA_role
这感觉很糟糕!
有什么建议?
c# ×6
.net-3.5 ×1
asp.net ×1
asp.net-mvc ×1
cmd ×1
file ×1
logging ×1
oauth ×1
oauth-2.0 ×1
openid ×1
pinvoke ×1
reactjs ×1
security ×1
session ×1
string ×1
swagger-2.0 ×1
swagger-ui ×1
swashbuckle ×1
timespan ×1
vuejs2 ×1
webrequest ×1
winforms ×1