小编Mvd*_*vdD的帖子

在浏览器中存储JWT的位置?如何防范CSRF?

我知道基于cookie的身份验证.可以应用SSL和HttpOnly标志来保护来自MITM和XSS的基于cookie的身份验证.但是,需要采取更多特殊措施以保护其免受CSRF的影响.它们有点复杂.(参考)

最近,我发现JSON Web Token(JWT)作为身份验证的解决方案非常热门.我知道有关编码,解码和验证JWT的内容.但是,我不明白为什么有些网站/教程在使用JWT时不需要CSRF保护.我已经阅读了很多,并试图总结下面的问题.我只是希望有人可以提供JWT的全貌并澄清我对JWT误解的概念.

  1. 如果JWT存储在cookie中,我认为它与基于cookie的身份验证相同,除了服务器不需要有会话来验证cookie /令牌.如果没有实施特殊措施,CSRF仍存在风险.JWT不是存储在cookie中吗?

  2. 如果JWT存储在localStorage/sessionStorage中,那么没有cookie所以不需要防止CRSF.问题是如何将JWT发送到服务器.我发现这里建议使用jQuery通过ajax请求的HTTP头发送JWT.那么,只有ajax请求才能进行身份验证吗?

  3. 此外,我发现还有一个博客节目使用"授权标题"和"承载"来发送JWT.我不明白博客谈论的方法.有人可以解释一下"授权标题"和"持票人"的更多信息吗?这是否使所有请求的HTTP头传输JWT?如果是的话,CSRF怎么样?

security authentication cookies csrf jwt

142
推荐指数
6
解决办法
5万
查看次数

在本机Python中解析DICOM文件

解析DICOM文件的最简单,最pythonic的方法是什么?

不使用非Python库的本机Python实现将是更受欢迎的.DICOM是数字医疗成像中的标准文件格式(有关更多信息,请查看此处).

有一些C/C++库支持读取(子集)DICOM文件.其中两个或三个甚至都有Python绑定.本机Python解析器可以为我提供两个目的:

  1. 无需构建任何外部C/C++库.
  2. 了解DICOM文件格式.

python format image medical dicom

19
推荐指数
4
解决办法
2万
查看次数

在单个SQL查询中查找多个父项的所有子项

假设我有一个父子关系表.

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.

我不再对输出中的关系感兴趣,只是对多个家庭的完整家庭成员感兴趣.

sql sql-server hierarchical-data

9
推荐指数
1
解决办法
3万
查看次数

异步WCF结束方法中的Thread.CurrentPrincipal错误

我有一个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兼容性?

wcf iprincipal wif async-await executioncontext

9
推荐指数
1
解决办法
1883
查看次数

为什么SHA1.ComputeHash在很多线程的高负载下失败?

我看到我维护的一些代码存在问题.下面的代码有一个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失败了吗?

还有其他理论吗?

c# stress-testing finalizer sha

9
推荐指数
1
解决办法
4321
查看次数

Streamlit 多页应用程序中的会话状态已重置

我正在构建 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和 …

python session-state streamlit

9
推荐指数
1
解决办法
3032
查看次数

是否可以为Azure AD中的用户或组分配多个角色?

当我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仅允许我将单个角色分配给用户或组.

我找不到如何为用户或组分配多个角色.我可以将用户添加到多个组并将角色分配给该组的成员,这将导致该用户的令牌中出现多个角色声明,但这看起来很尴尬.

我错过了什么吗?有没有办法为用户或组分配多个角色?

authorization roles azure azure-active-directory

8
推荐指数
2
解决办法
4097
查看次数

如何通过Visual Studio自动化在我的解决方案中添加对另一个项目的引用

我创建了一个新的解决方案,并通过Solution2.AddFromTemplate添加了一些项目.在我成功构建解决方案之前,我需要将一个项目的项目引用添加到另一个项目中.我正在尝试导航VS自动化对象模型,但无法找到如何执行此操作.

我意识到我可以将csproj作为XML打开并在磁盘上更改(如此处所示),但随后我需要处理Visual Studio检测项目文件更改并提示重新加载它.

任何人都知道如何做到这一点或指出我正确的方向?

automation csproj visual-studio-2010 visual-studio envdte

6
推荐指数
1
解决办法
2747
查看次数

在python数组和.NET数组之间转换

我有一个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数组?

.net python arrays ironpython marshalling

5
推荐指数
1
解决办法
6030
查看次数

403禁止使用Azure Graph API

尝试使用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 AD中注册的客户端具有以下所有权限: Azure AD中的权限

我错过了什么?

编辑: 我在Azure …

c# azure azure-active-directory azure-ad-graph-api

5
推荐指数
1
解决办法
6160
查看次数