我知道基于cookie的身份验证.可以应用SSL和HttpOnly标志来保护来自MITM和XSS的基于cookie的身份验证.但是,需要采取更多特殊措施以保护其免受CSRF的影响.它们有点复杂.(参考)
最近,我发现JSON Web Token(JWT)作为身份验证的解决方案非常热门.我知道有关编码,解码和验证JWT的内容.但是,我不明白为什么有些网站/教程在使用JWT时不需要CSRF保护.我已经阅读了很多,并试图总结下面的问题.我只是希望有人可以提供JWT的全貌并澄清我对JWT误解的概念.
如果JWT存储在cookie中,我认为它与基于cookie的身份验证相同,除了服务器不需要有会话来验证cookie /令牌.如果没有实施特殊措施,CSRF仍存在风险.JWT不是存储在cookie中吗?
如果JWT存储在localStorage/sessionStorage中,那么没有cookie所以不需要防止CRSF.问题是如何将JWT发送到服务器.我发现这里建议使用jQuery通过ajax请求的HTTP头发送JWT.那么,只有ajax请求才能进行身份验证吗?
此外,我发现还有一个博客节目使用"授权标题"和"承载"来发送JWT.我不明白博客谈论的方法.有人可以解释一下"授权标题"和"持票人"的更多信息吗?这是否使所有请求的HTTP头传输JWT?如果是的话,CSRF怎么样?
解析DICOM文件的最简单,最pythonic的方法是什么?
不使用非Python库的本机Python实现将是更受欢迎的.DICOM是数字医疗成像中的标准文件格式(有关更多信息,请查看此处).
有一些C/C++库支持读取(子集)DICOM文件.其中两个或三个甚至都有Python绑定.本机Python解析器可以为我提供两个目的:
假设我有一个父子关系表.
parent child 1 4 1 5 2 6 3 7 4 8 6 9 7 10 8 11
现在我有一个返回人员列表的查询(例如1和2),我想找到他们所有的孩子,孙子等等(在这种情况下:4,5,6,8,9,11).
我知道我可以使用公共表表达式来递归搜索,但我想知道我是否可以创建一个SQL语句来一次查找所有后代而不必迭代输入集.
编辑:抱歉不够清楚.我正在寻找类似的东西:
SELECT {Hierarchical relation} from table where parent in (1,2)
这应该导致单个输出列的行为4,5,6,8,9,11.
我不再对输出中的关系感兴趣,只是对多个家庭的完整家庭成员感兴趣.
我有一个WCF服务,它的Thread.CurrentPrincipal
设置在ServiceConfiguration.ClaimsAuthorizationManager
.
当我像这样异步实现服务时:
public IAsyncResult BeginMethod1(AsyncCallback callback, object state)
{
// Audit log call (uses Thread.CurrentPrincipal)
var task = Task<int>.Factory.StartNew(this.WorkerFunction, state);
return task.ContinueWith(res => callback(task));
}
public string EndMethod1(IAsyncResult ar)
{
// Audit log result (uses Thread.CurrentPrincipal)
return ar.AsyncState as string;
}
private int WorkerFunction(object state)
{
// perform work
}
Run Code Online (Sandbox Code Playgroud)
我发现Thread.CurrentPrincipal在Begin-method和WorkerFunction中设置为正确的ClaimsPrincipal,但是在End-method中它被设置为GenericPrincipal.
我知道我可以为服务启用ASP.NET兼容性并使用HttpContext.Current.User
在所有方法中具有正确主体的服务,但我宁愿不这样做.
有没有办法强制Thread.CurrentPrincipal到正确的ClaimsPrincipal而不打开ASP.NET兼容性?
我看到我维护的一些代码存在问题.下面的代码有一个private static SHA1
成员(这是一个IDisposable
但是因为它static
,它应该永远不会最终确定).但是,在压力下,此代码会抛出一个异常,表明它已被关闭:
Caught exception. Safe handle has been closed"
Stack trace: Call stack where exception was thrown
at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
at System.Security.Cryptography.Utils.HashData(SafeHashHandle hHash, Byte[] data, Int32 cbData, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.Utils.HashData(SafeHashHandle hHash, Byte[] data, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.HashAlgorithm.ComputeHash(Byte[] buffer)
Run Code Online (Sandbox Code Playgroud)
有问题的代码是:
internal class TokenCache
{
private static SHA1 _sha1 = SHA1.Create();
private string ComputeHash(string password)
{
byte[] passwordBytes = UTF8Encoding.UTF8.GetBytes(password);
return UTF8Encoding.UTF8.GetString(_sha1.ComputeHash(passwordBytes));
}
Run Code Online (Sandbox Code Playgroud)
我的问题显然是可能导致这个问题的原因.呼叫是否可以SHA1.Create
静默失败(有多少加密资源可用)?这可能是因为appdomain失败了吗?
还有其他理论吗?
我正在构建 Streamlit 多页面应用程序,但在页面之间切换时保持会话状态时遇到问题。我的主页称为 mainpage.py ,内容如下:
import streamlit as st
if "multi_select" not in st.session_state:
st.session_state["multi_select"] = ["abc", "xyz"]
if "select_slider" not in st.session_state:
st.session_state["select_slider"] = ("1", "10")
if "text_inp" not in st.session_state:
st.session_state["text_inp"] = ""
st.sidebar.multiselect(
"multiselect",
["abc", "xyz"],
key="multi_select",
default=st.session_state["multi_select"],
)
st.sidebar.select_slider(
"number range",
options=[str(n) for n in range(1, 11)],
key="select_slider",
value=st.session_state["select_slider"],
)
st.sidebar.text_input("Text:", key="text_inp")
for v in st.session_state:
st.write(v, st.session_state[v])
Run Code Online (Sandbox Code Playgroud)
接下来,我在名为“pages”的子目录中有另一个名为“anotherpage.py”的页面,其内容如下:
import streamlit as st
for v in st.session_state:
st.write(v, st.session_state[v])
Run Code Online (Sandbox Code Playgroud)
如果我运行此应用程序,更改控件的值并切换到其他页面,我会看到控件的值被保留并打印。但是,如果我切换回主页,所有内容都会重置为原始值。由于某种原因st.session_state
被清除。
有人知道如何将值保持在会话状态吗?我正在使用 Python3.11.1
和 …
当我appRoles
向Azure AD中的应用程序清单添加一个部分时,我可以将用户和组分配给管理门户中的角色.
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Can read data.",
"displayName": "Data Reader",
"id": "67fba7fa-e54e-4258-b95d-32b082eb771d",
"isEnabled": true,
"value": "reader"
},
{
"allowedMemberTypes": [
"User"
],
"description": "Can create and edit data.",
"displayName": "Data Writer",
"id": "e36736c5-e923-435e-8e44-6cae90792931",
"isEnabled": true,
"value": "writer"
}
],
Run Code Online (Sandbox Code Playgroud)
但是,UI仅允许我将单个角色分配给用户或组.
我找不到如何为用户或组分配多个角色.我可以将用户添加到多个组并将角色分配给该组的成员,这将导致该用户的令牌中出现多个角色声明,但这看起来很尴尬.
我错过了什么吗?有没有办法为用户或组分配多个角色?
我创建了一个新的解决方案,并通过Solution2.AddFromTemplate添加了一些项目.在我成功构建解决方案之前,我需要将一个项目的项目引用添加到另一个项目中.我正在尝试导航VS自动化对象模型,但无法找到如何执行此操作.
我意识到我可以将csproj作为XML打开并在磁盘上更改(如此处所示),但随后我需要处理Visual Studio检测项目文件更改并提示重新加载它.
任何人都知道如何做到这一点或指出我正确的方向?
我有一个python方法返回一个Python字节array.array('c').
现在,我想使用System.Runtime.InteropServices.Marshal.Copy复制此数组.但是,此方法需要.NET数组.
import array
from System.Runtime.InteropServices import Marshal
bytes = array.array('c')
bytes.append('a')
bytes.append('b')
bytes.append('c')
Marshal.Copy(bytes, dest, 0, 3)
Run Code Online (Sandbox Code Playgroud)
有没有办法在不复制数据的情况下完成这项工作?如果没有,我如何将Python数组中的数据转换为.NET数组?
尝试使用Graph API创建应用程序时,我从Azure AD获得403 Forbidden响应:
private static void CreateApplicationViaPost(string tenantId, string clientId, string clientSecret)
{
var authContext = new AuthenticationContext(
string.Format("https://login.windows.net/{0}",
tenantId));
ClientCredential clientCred = new ClientCredential(clientId, clientSecret);
AuthenticationResult result = authContext.AcquireToken(
"https://graph.windows.net",
clientCred);
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
const string json = @"{ displayName: ""My test app"", logoutUrl: ""http://logout.net"", identifierUris: [ ""http://identifier1.com"" ], replyUrls: [ ""http://replyUrl.net"" ] }";
HttpResponseMessage response = client.PostAsync(
string.Format("https://graph.windows.net/{0}/applications?api-version=1.6", tenantId),
new StringContent(json, Encoding.UTF8, "application/json")).Result;
Console.WriteLine(response.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
编辑: 我在Azure …
python ×3
azure ×2
c# ×2
.net ×1
arrays ×1
async-await ×1
automation ×1
cookies ×1
csproj ×1
csrf ×1
dicom ×1
envdte ×1
finalizer ×1
format ×1
image ×1
iprincipal ×1
ironpython ×1
jwt ×1
marshalling ×1
medical ×1
roles ×1
security ×1
sha ×1
sql ×1
sql-server ×1
streamlit ×1
wcf ×1
wif ×1