我在这里概念性地提出一个问题,因为我试图理解基于OAuth2的系统中作用域和用户角色之间的关系.
在我实现API时,我想通过使用资源上的作用域来限制对特定资源的访问.我理解使用访问令牌来请求资源,我相信我的理解是正确的,因为您在请求访问令牌时指定了范围.
什么我不完全肯定的是如何范围的限制,将工作基础上,一个身份验证的用户是在特定的角色.让我们假设Bob是一个管理和苏是一个普通用户.我们有一些受is_admin范围保护的资源.什么阻止Sue 在她的访问令牌中请求(和接收)is_admin范围?
我想应该发生的事情如下:
是否由我的呼叫应用程序强制执行仅发送询问Bobs需要的范围?或者是否有关于范围的遗漏?
有人可以用一些简单的例子来启发我吗?
我们有一个 ASP.Net WebForms 应用程序,它使用 SignalR (v2.4.1) 在服务器和客户端之间进行一些双向通信。多年来一直运行良好:连接稳定,数百名用户使用它,等等。
但是,我们已经开始从我们的客户群中收到有关连接问题的零星报告,所有报告都报告相同的事情:如果浏览器 (Chrome) 会话闲置超过 5 分钟,则连接在后台断开。页面中的所有计时器都停止定期运行,这(除其他外)停止发送“keepalive”,最终连接失败并出现客户端错误:
The client has been inactive since <date> and it has exceeded the inactivity timeout of 50000 ms. Stopping the connection.
Run Code Online (Sandbox Code Playgroud)
此后的标准程序是自动重新启动连接,但这不会做任何事情。如果/当用户重新激活页面(例如通过切换到选项卡),一切都开始恢复活力,尽管 SignalR 连接已关闭。
经过大量调查,我们似乎受到了Chrome v88 中引入的这一更改的影响,其中计时器 ( setTimeouts) 受到严格限制,如果
5 分钟/30 秒的条件与我们得到的报告相符。然而,我们在我们的页面上运行非常基本的 Javascript:setTimeout在我们自己的代码中只有两种用法,它们都不能“链接”(递归)到自己身上。我们也不能复制的问题:这是发生在我们的测试,但我们不能让这发生可靠。通过禁用此功能chrome://flags/#intensive-wake-up-throttling似乎可以缓解该问题 - 但当然,我们不能将其作为使用我们网站的要求。
该站点上唯一运行的其他 Javascript 是jquery.signalR-2.4.1.js,并且从 SignalR 源代码中可以看出,其中有很多setTimeouts。SignalR 是否会受到 Chrome 中这一变化的影响;也许是在临时网络问题或其他一些不可预测的事件后尝试以静默方式重新连接时?
如果没有,是否有任何方法可以在任何浏览器或 …
我有一个MongoDB的单个主要实例要连接.我正在使用C#驱动程序(最新版本)来连接和使用MongoDB.
我的客户端应用程序是多线程的,其中进程将以不同的时间间隔定期运行以生成报告.当多个线程正在运行,并且我在驱动程序上调用各种函数(例如server.DatabaseExists(...))时,我一直遇到异常.
"请求的名称有效,但未找到所请求类型的数据"
at System.Net.Dns.GetAddrInfo(String name)
at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
at MongoDB.Driver.MongoServerAddress.ToIPEndPoint(AddressFamily addressFamily) in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoServerAddress.cs:line 195
at MongoDB.Driver.MongoServerInstance.GetIPEndPoint() in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoServerInstance.cs:line 339
at MongoDB.Driver.Internal.MongoConnection.Open() in C:\work\rstam\mongo-csharp-driver\Driver\Internal\MongoConnection.cs:line 368
at MongoDB.Driver.Internal.MongoConnection.GetNetworkStream() in C:\work\rstam\mongo-csharp-driver\Driver\Internal\MongoConnection.cs:line 574
at MongoDB.Driver.Internal.MongoConnection.SendMessage(MongoRequestMessage message, SafeMode safeMode, String databaseName) in C:\work\rstam\mongo-csharp-driver\Driver\Internal\MongoConnection.cs:line 555
at MongoDB.Driver.MongoCursorEnumerator`1.GetReply(MongoConnection connection, MongoRequestMessage message) in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 295
at MongoDB.Driver.MongoCursorEnumerator`1.GetFirst() in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 253
at MongoDB.Driver.MongoCursorEnumerator`1.MoveNext() in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoCursorEnumerator.cs:line 141
at MongoDB.Driver.MongoDatabase.GetCollectionNames() in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoDatabase.cs:line 645
at MongoDB.Driver.MongoDatabase.CollectionExists(String collectionName) in C:\work\rstam\mongo-csharp-driver\Driver\Core\MongoDatabase.cs:line 297
Run Code Online (Sandbox Code Playgroud)
运行一个线程不会导致此问题.我理解MongoDB是线程安全的,所以我无法理解原因和补救措施.
我有一组使用xsd.exe构建的类,我正在尝试序列化它们.但是,生成的XML中不包含属性.以下是问题所在的架构的一部分.
<xsd:element name="Widget">
<xsd:complexType>
/* sequence removed for brevity */
<xsd:attribute name="Version" type="Version" use="optional" default="1.1"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="Version">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="1.0"/>
<xsd:enumeration value="1.1"/>
</xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)
xsd.exe在"Widget"类和另一个名为"VersionSpecified"的属性上生成了一个名为"Version"的属性,但是即使设置为true,这在我序列化时也不会生成属性:
[XmlAttributeAttribute]
[DefaultValueAttribute(Version.Version_1_1)]
public Version Version { get; set; }
[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是它所依据的枚举:
/// <remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
[XmlEnumAttribute("1.0")]
Version_1_0,
[XmlEnumAttribute("1.1")]
Version_1_1,
}
Run Code Online (Sandbox Code Playgroud)
根据请求的代码段
Widget widget = new Widget();
widget.Version = Version.Version_1_1;
widget.VersionSpecified = true;
XmlSerializer serializer = new XmlSerializer(widget.GetType());
serializer.Serialize(/*Memory Stream object*/, …Run Code Online (Sandbox Code Playgroud) 这是:
($.fn.myFunc = function() {
var Dennis = function() { /*code */ }
$('#Element').click(Dennis);
})();
Run Code Online (Sandbox Code Playgroud)
相当于:
($.fn.myFunc = function() {
$('#Element').click(function() { /*code */ });
})();
Run Code Online (Sandbox Code Playgroud)
如果没有,有人可以解释差异,并建议更好的路线,性能,功能重用和阅读清晰度.
谢谢!
到目前为止,我一直非常成功地使用SignalR,但我发现我无法找到任何记录的参考或解决方案.
我有一个服务器端函数,其类参数具有Double属性
public bool AddThing(Thing thing)
{
// add and notify client
}
public class Thing {
public Double Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我使用文本而不是属性Foo的数字发送Thing对象,则服务器正确地返回500错误
{"hub":"ThingHub","method":"AddThing","args":[{"Foo":"bar"}],"state":{},"id":1}
Run Code Online (Sandbox Code Playgroud)
由于这是在SignalR上下文启动之前发生的,如何处理客户端的错误?Hub是否有任何特殊的回调或属性需要检查?我需要对服务器端的Hub做些什么特别的事情吗?
谢谢!
以下XAML表示我尝试在Expression Blend中构建的对象.我在StackPanel中遇到DataTrigger问题 - 当触发器匹配数据时,应用程序不会转到Empty.在此代码之后进一步说明:
<DataTemplate x:Key="SampleTemplate">
<StackPanel x:Name="SampleStack" Style="{StaticResource DefaultSampleStyle}" Width="64" Height="60">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0">
<Storyboard>
<ColorAnimation Duration="0" To="#FFDFE04B" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="SampleStack" d:IsOptimized="True"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Empty">
<Storyboard>
<ColorAnimation Duration="0" To="#FF4B6FE0" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="SampleStack" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding IsActive}" Value="False">
<ei:GoToStateAction StateName="Empty" UseTransitions="False"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
<TextBlock x:Name="StartOn" Text="{Binding StartOn, StringFormat=hh:mm}"/><TextBlock x:Name="textBlock" Text="-" />
<TextBlock x:Name="EndOn" Text="{Binding EndOn, StringFormat=hh:mm}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果我使用带有Loaded值的EventTrigger,则会根据IsActive绑定正确应用Empty状态.如果我使用现有的 …